This commit is contained in:
2026-03-09 10:50:12 +03:00
commit f1a81a6408
119 changed files with 8378 additions and 0 deletions
+118
View File
@@ -0,0 +1,118 @@
# Auto-generated using compose2nix v0.3.3-pre.
{
pkgs,
lib,
config,
...
}:
{
# Runtime
virtualisation.podman = {
enable = true;
autoPrune = {
enable = true;
flags = [ "--all" ];
};
dockerCompat = true;
};
# Enable container name DNS for all Podman networks.
networking.firewall.interfaces =
let
matchAll = if !config.networking.nftables.enable then "podman+" else "podman*";
in
{
"${matchAll}".allowedUDPPorts = [ 53 ];
};
networking.firewall = {
allowedUDPPortRanges = [
{
from = 14380;
to = 15380;
}
];
allowedTCPPortRanges = [
{
from = 14380;
to = 15380;
}
];
allowedTCPPorts = [
8443
9443
13380
];
allowedUDPPorts = [
8443
9443
13380
];
};
virtualisation.oci-containers.backend = "podman";
# Containers
virtualisation.oci-containers.containers."3xui_app" = {
image = "ghcr.io/mhsanaei/3x-ui:latest";
environment = {
"XRAY_VMESS_AEAD_FORCED" = "false";
"XUI_ENABLE_FAIL2BAN" = "true";
"TZ" = "Europe/Moscow";
};
volumes = [
"/mnt/containers/3x-ui/cert/:/root/cert:rw"
"/mnt/containers/3x-ui/db/:/etc/x-ui:rw"
];
log-driver = "journald";
extraOptions = [
"--network=host"
];
};
systemd.services."podman-3xui_app" = {
serviceConfig = {
Restart = lib.mkOverride 90 "always";
};
partOf = [
"podman-compose-3x-ui-root.target"
];
wantedBy = [
"podman-compose-3x-ui-root.target"
];
};
# Builds
# systemd.services."podman-build-3xui_app" = {
# path = [
# pkgs.podman
# pkgs.git
# ];
# serviceConfig = {
# Type = "oneshot";
# TimeoutSec = 300;
# };
# script = ''
# cd /mnt/containers/3x-ui
# podman build -t compose2nix/3xui_app -f ./Dockerfile .
# '';
# };
# Root service
# When started, this will automatically create all resources and start
# the containers. When stopped, this will teardown all resources.
systemd.targets."podman-compose-3x-ui-root" = {
unitConfig = {
Description = "Root target generated by compose2nix.";
};
wantedBy = [ "multi-user.target" ];
};
# Folders
systemd.tmpfiles.rules = [
"d /mnt 0755 root root -"
"d /mnt/containers 0755 root root -"
"d /mnt/containers/3x-ui 0755 root root -"
"d /mnt/containers/3x-ui/cert 0755 root root -"
"d /mnt/containers/3x-ui/db 0755 root root -"
];
}
+121
View File
@@ -0,0 +1,121 @@
{
pkgs,
lib,
config,
xlib,
...
}:
{
# Runtime
virtualisation.podman = {
enable = true;
autoPrune.enable = true;
dockerCompat = true;
dockerSocket.enable = true;
defaultNetwork.settings.dns_enabled = true;
};
# Enable container name DNS for all Podman networks.
networking.firewall.interfaces =
let
matchAll = if !config.networking.nftables.enable then "podman+" else "podman*";
in
{
"${matchAll}".allowedUDPPorts = [ 53 ];
};
virtualisation.oci-containers.backend = "podman";
# Containers
virtualisation.oci-containers.containers."openhands-app" = {
image = "ghcr.io/openhands/openhands:latest";
environment = {
"AGENT_SERVER_IMAGE_REPOSITORY" = "ghcr.io/openhands/agent-server";
"AGENT_SERVER_IMAGE_TAG" = "31536c8-python";
"WORKSPACE_MOUNT_PATH" = "${xlib.dirs.services-mnt-folder}/containers/openhands/workspace";
};
volumes = [
"${xlib.dirs.services-mnt-folder}/containers/openhands/userspace:/.openhands:rw"
"${xlib.dirs.services-mnt-folder}/containers/openhands/workspace:/opt/workspace_base:rw"
"/run/podman/podman.sock:/var/run/docker.sock:rw"
];
ports = [
"3000:3000/tcp"
];
log-driver = "journald";
extraOptions = [
# "--network=host"
"--add-host=host.docker.internal:host-gateway"
"--network-alias=openhands"
"--network=openhands_default"
];
};
systemd.services."podman-openhands-app" = {
serviceConfig = {
Restart = lib.mkOverride 90 "no";
};
after = [
"podman-network-openhands_default.service"
];
requires = [
"podman-network-openhands_default.service"
];
partOf = [
"podman-compose-openhands-root.target"
];
wantedBy = [
"podman-compose-openhands-root.target"
];
};
# Networks
systemd.services."podman-network-openhands_default" = {
path = [ pkgs.podman ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStop = "podman network rm -f openhands_default";
};
script = ''
podman network inspect openhands_default || podman network create openhands_default
'';
partOf = [ "podman-compose-openhands-root.target" ];
wantedBy = [ "podman-compose-openhands-root.target" ];
};
# Builds
systemd.services."podman-build-openhands-app" = {
enable = false;
path = [
pkgs.podman
pkgs.git
];
serviceConfig = {
Type = "oneshot";
TimeoutSec = 300;
};
script = ''
cd ${xlib.dirs.services-mnt-folder}/containers/openhands/source
podman build -t openhands:latest -f ./containers/app/Dockerfile .
'';
};
# Root service
# When started, this will automatically create all resources and start
# the containers. When stopped, this will teardown all resources.
systemd.targets."podman-compose-openhands-root" = {
unitConfig = {
Description = "Root target generated by compose2nix.";
};
wantedBy = [ "multi-user.target" ];
};
systemd.tmpfiles.rules = [
"d ${xlib.dirs.services-mnt-folder} 0755 root root -"
"d ${xlib.dirs.services-mnt-folder}/containers 0755 root root -"
"d ${xlib.dirs.services-mnt-folder}/containers/openhands 0755 root root -"
"d ${xlib.dirs.services-mnt-folder}/containers/openhands/userspace 0755 root root -"
"d ${xlib.dirs.services-mnt-folder}/containers/openhands/workspace 0755 root root -"
];
}
+28
View File
@@ -0,0 +1,28 @@
{
config,
lib,
pkgs,
inputs,
xlib,
...
}:
{
# fileSystems."${config.services.immich.mediaLocation}" = {
# device = "${xlib.dirs.services-folder}/immich";
# options = [
# "bind"
# "nofail"
# ];
# };
# systemd.tmpfiles.rules = [
# "z ${config.services.immich.mediaLocation} 0755 immich immich -"
# ];
# environment = {
# systemPackages = with pkgs; [
# immich-cli
# ];
# };
}
+62
View File
@@ -0,0 +1,62 @@
{ inputs, ... }@flakeContext:
let
defaultModule =
{
config,
lib,
xlib,
deviceType,
...
}:
{
imports = with inputs; [
./essentials
./users.nix
./options.nix
(./. + "/${deviceType}") # specific modules
home-manager.nixosModules.home-manager # home-manager module
# nix-index-database.nixosModules.nix-index # nix-index module
grub2-themes.nixosModules.default # grub2 themes module
sops-nix.nixosModules.sops # sops module
self.homeConfigurations.default.nixosModule # default homeConfigurations
disko.nixosModules.disko # disko module
noctalia.nixosModules.default
];
nixpkgs.overlays = [
inputs.self.nixosOverlays.default
];
_module.args = {
inputs = inputs;
xlib = config.xlib;
};
};
publicModule =
{
config,
lib,
xlib,
...
}:
{
imports = with inputs; [
./essentials
./users.nix
./options.nix
disko.nixosModules.disko # disko module
sops-nix.nixosModules.sops # sops module
];
_module.args = {
inputs = inputs;
xlib = config.xlib;
};
};
in
{
nixosModules = {
default = defaultModule;
public = publicModule;
};
}
+74
View File
@@ -0,0 +1,74 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./environment
./theming.nix
];
boot = {
plymouth = {
enable = true;
theme = "bgrt";
};
consoleLogLevel = 3; # Enable "Silent boot"
initrd.verbose = false;
kernelParams = [
"quiet"
"splash"
"boot.shell_on_fail"
"udev.log_priority=3"
"rd.systemd.show_status=auto"
];
loader = {
timeout = 2;
efi.canTouchEfiVariables = lib.mkForce false;
systemd-boot.enable = lib.mkForce false;
grub = {
enable = lib.mkForce true;
device = "nodev";
efiInstallAsRemovable = true;
efiSupport = true;
useOSProber = true;
};
grub2-theme = {
enable = true;
theme = "whitesur";
icon = "whitesur";
footer = true;
customResolution = "1920x1080"; # Optional: Set a custom resolution
};
};
};
hardware.graphics.enable = true;
programs = {
dconf.enable = true;
gamemode.enable = true;
# steam.enable = true;
xwayland.enable = true;
};
services = {
xserver = {
enable = true;
xkb = {
layout = "us,ru";
variant = "";
options = "grp:alt_shift_toggle";
};
};
libinput.enable = true;
colord.enable = true;
printing = {
enable = true;
cups-pdf.enable = true;
};
};
# environment.sessionVariables = {
# NIXOS_OZONE_WL = "1";
# };
}
+11
View File
@@ -0,0 +1,11 @@
{
...
}:
{
imports = [
./kde.nix
# ./gnome.nix
# ./noctalia.nix
# ./xfce.nix
];
}
+49
View File
@@ -0,0 +1,49 @@
{
config,
lib,
pkgs,
...
}:
{
# qt = {
# enable = true;
# style = "breeze";
# platformTheme = "kde6"; # kde6
# };
programs.dconf.enable = true;
environment = {
gnome.excludePackages = with pkgs; [
cheese # webcam tool
epiphany # web browser
#evince # document viewer
geary # email reader
gnome-characters
gnome-music
gnome-user-docs
gnome-tour
];
systemPackages = with pkgs; [
gnomeExtensions.appindicator
# gnomeExtensions.dash-to-panel
# gnomeExtensions.arcmenu
# gnomeExtensions.vitals
gnomeExtensions.user-themes
gnome-tweaks
# dconf-editor
# dconf2nix
gnome-color-manager
];
};
services = {
gnome.gnome-keyring.enable = lib.mkForce false;
udev.packages = with pkgs; [
gnome-settings-daemon
];
displayManager.gdm = {
enable = true;
wayland = true;
};
desktopManager.gnome.enable = true;
};
}
+35
View File
@@ -0,0 +1,35 @@
{
config,
lib,
pkgs,
...
}:
{
# qt = {
# enable = true;
# style = "breeze";
# platformTheme = "kde6"; # kde6
# };
environment.plasma6.excludePackages = with pkgs; [
kdePackages.plasma-browser-integration
kdePackages.elisa
kdePackages.ksshaskpass
kdePackages.kwallet
kdePackages.kwallet-pam
kdePackages.kwalletmanager
];
services = {
displayManager = {
sddm = {
enable = true;
theme = "WhiteSur-light";
wayland = {
enable = true;
compositor = "kwin";
};
};
};
desktopManager.plasma6.enable = true;
};
programs.partition-manager.enable = true;
}
+31
View File
@@ -0,0 +1,31 @@
{
config,
inputs,
lib,
pkgs,
...
}:
{
# environment.systemPackages = with pkgs; [
# # inputs.noctalia.packages.${pkgs.stdenv.hostPlatform.system}.default
# ];
services = {
noctalia-shell = {
enable = false;
};
# hypridle.enable = true;
};
programs = {
niri = {
enable = true;
};
# uwsm.enable = true;
# hyprland = {
# enable = true;
# xwayland.enable = true;
# withUWSM = true;
# };
# iio-hyprland.enable = true;
# hyprlock.enable = true;
};
}
+36
View File
@@ -0,0 +1,36 @@
{
config,
lib,
pkgs,
...
}:
{
services.xserver.displayManager.lightdm.enable = true;
#services.displayManager.defaultSession = "lomiri";
# services.xserver.desktopManager.budgie.enable = true;
#services.xserver.displayManager.lightdm.greeters.lomiri.enable= true;
#services.desktopManager.lomiri.enable = true;
#-services.xserver.desktopManager.mate.enable = true;
#-services.xserver.desktopManager.lxqt.enable = true;
# services.xserver.desktopManager.lumina.enable = true;
# services.xserver.desktopManager.cde.enable = true;
# services.xserver.desktopManager.cinnamon.enable = true;
# services.xserver.desktopManager.enlightenment.enable = true;
# services.desktopManager.cosmic.xwayland.enable = true;
# services.desktopManager.cosmic.enable = true;
services.xserver = {
enable = true;
desktopManager = {
#xterm.enable = false;
xfce.enable = true;
xfce.enableWaylandSession = true;
};
};
#- services.xserver.desktopManager.pantheon.enable = true;
#- services.pantheon.apps.enable = true;
}
+18
View File
@@ -0,0 +1,18 @@
{
config,
pkgs,
...
}:
{
environment = {
systemPackages = with pkgs; [
#qogir-kde
#qogir-theme
#whitesur-cursors
qogir-icon-theme
whitesur-gtk-theme
whitesur-icon-theme
whitesur-kde
];
};
}
+13
View File
@@ -0,0 +1,13 @@
{
config,
...
}:
{
imports = [
./packages.nix
./services.nix
./settings.nix
# ./systemd-routine.nix
./shell.nix
];
}
+200
View File
@@ -0,0 +1,200 @@
{
config,
pkgs,
inputs,
...
}:
let
master = import inputs.nixpkgs-master {
system = "x86_64-linux";
};
in
{
environment = {
systemPackages = with pkgs; [
# Minimal
btop
broot
bottom
fastfetchMinimal
# Encrypt
age
sops
ssh-to-age
# Nix
nix-diff
nix-tree
nixfmt-tree
nvd
nix-du
nix-prefetch-scripts
deploy-rs
# Lazy
lazycli
lazysql
lazyjournal
systemctl-tui
# Base
curl
# efibootmgr
fd
fdupes
fzf
gdu
lsof
mc
pciutils
usbutils
rsync
wget
tree
dust
flow-control
# Net Diagnostic
mtr
dnsutils
inetutils
# Android tools
android-tools
# Monitoring
smartmontools
# Disk
parted
ntfs3g
exfatprogs # for gparted exfat support
# Archivers
# rar
unzip
zstd
zip
#xarchiver
# Net
ipset
iptables
nftables
openssl
# To save
tuios
fresh-editor
# Test
jocalsend
lazydocker
dtop
tlrc
lazyssh
mcat
framework-tool-tui
bluetui
snitch
devenv
whosthere
];
};
environment.variables.EDITOR = "fresh";
programs = {
# nix-ld.enable = true;
nano = {
enable = true;
nanorc = ''
set nowrap
set tabstospaces
set tabsize 2
'';
syntaxHighlight = true;
};
yazi = {
enable = false;
plugins = {
inherit (pkgs.yaziPlugins)
gitui
git
sudo
ouch
rsync
diff
mount
chmod
dupes
lazygit
toggle-pane
rich-preview
smart-filter
full-border
recycle-bin
;
};
flavors = {
nord = pkgs.yaziPlugins.nord;
};
settings = {
yazi = {
mgr.ratio = [
1
1
4
];
};
keymap = {
mgr.prepend_keymap = [
{
on = [
"g"
"i"
];
run = "plugin lazygit";
desc = "run lazygit";
}
{
run = "plugin ouch --args=zip";
on = [
"g"
"C"
];
desc = "Compress with ouch";
}
];
};
theme = {
flavor = {
light = "nord";
dark = "nord";
};
};
};
};
git = {
enable = true;
config = {
user = {
name = "oqyude";
email = "oqyude@gmail.com";
};
};
};
lazygit.enable = true;
bat.enable = true;
# command-not-found.enable = false;
# nix-index.enable = true;
nh = {
enable = true;
flake = "/etc/nixos";
clean = {
enable = true;
extraArgs = "--keep 3 --keep-since 2d";
dates = "daily";
};
};
};
}
+12
View File
@@ -0,0 +1,12 @@
{
config,
lib,
pkgs,
xlib,
...
}:
{
services = {
tailscale.enable = xlib.device.type != "wsl"; # true, if not wsl
};
}
+76
View File
@@ -0,0 +1,76 @@
{
config,
lib,
pkgs,
...
}:
{
# new things https://git.voronind.com/voronind/nix/src/commit/c4a70068a474e9f30b8e367b69520c563e02fbd9/system/nix.nix
system.nixos.label = "default";
nix = {
package = pkgs.lixPackageSets.stable.lix;
channel.enable = false;
nixPath = [ "nixpkgs=flake:nixpkgs" ];
settings = {
require-sigs = false;
substituters = [
"https://cache.nixos.org"
"https://nix-community.cachix.org"
"https://mirror.yandex.ru/nixos"
"https://cache.nixos.kz"
# "https://cache.xd0.zip"
"https://nixos-cache-proxy.cofob.dev"
# "https://nixos-cache-proxy.sweetdogs.ru"
# "https://nixos-cache-proxy.elxreno.com"
# "https://nixos.snix.store" # https://nixos.snix.store/
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
];
stalled-download-timeout = 4;
connect-timeout = 4;
auto-optimise-store = true;
fallback = true;
allow-import-from-derivation = false;
keep-derivations = false;
keep-outputs = false;
experimental-features = [
"flakes"
"nix-command"
];
};
};
nixpkgs = {
flake = {
setFlakeRegistry = false;
setNixPath = false;
};
config.allowUnfree = true;
};
security = {
sudo.wheelNeedsPassword = false;
polkit = {
enable = true;
extraConfig = ''
polkit.addRule(function(action, subject) {
if (subject.isInGroup("wheel")){ // for sudo
return polkit.Result.YES;
}
});
'';
};
};
systemd.network.wait-online.enable = false;
time.timeZone = "Europe/Moscow";
i18n = {
defaultLocale = "en_US.UTF-8";
supportedLocales = [
"en_US.UTF-8/UTF-8"
"ru_RU.UTF-8/UTF-8"
];
};
}
+69
View File
@@ -0,0 +1,69 @@
{
config,
pkgs,
...
}:
{
system.userActivationScripts.zshrc = "touch .zshrc";
users.defaultUserShell = pkgs.zsh;
programs.zsh = {
enable = true;
enableCompletion = true;
enableBashCompletion = true;
syntaxHighlighting.enable = true;
zsh-autoenv.enable = true;
histSize = 10000;
loginShellInit = "cd /etc/nixos && clear && fastfetch";
ohMyZsh = {
enable = true;
theme = "robbyrussell";
};
shellInit = ''
beet-n() {
echo "$*" | aichat -cer beets
}
beet-p() {
beet mod path:. playlist="$*"
}
beet-ims() {
beet im ./ -S $*
}
'';
shellAliases = {
# shell
ff = "clear && fastfetch";
l = "ls -l";
lg = "lazygit";
lc = "lazycli";
st = "systemctl-tui";
gp = "git pull";
ns = "nh os switch";
gp-ns = "gp && ns";
y = "yazi";
nix-shellp = "nix-shell --run $SHELL -p";
z-proxy = "export ALL_PROXY=socks5://localhost:10808";
# beets
beet-ima = "beet im ./ -A";
# ssh
z-s = "ssh sapphira";
z-st = "ssh sapphira-tailscale";
z-o = "ssh otreca";
z-ot = "ssh otreca-tailscale";
z-l = "ssh lamet";
z-lt = "ssh lamet-tailscale";
z-p-1 = "ssh pubray-1";
z-map-local-proxy = "ssh -R 10808:localhost:10808";
# Somethings
reboot-bios = "sudo systemctl reboot --firmware-setup";
# Extras
plasma-manager = "nix run github:nix-community/plasma-manager";
pip2nix = "nix run github:nix-community/pip2nix --"; # https://github.com/nix-community/pip2nix
pip2nix-g = "nix run github:nix-community/pip2nix -- generate -r";
json2nix = "nix run github:sempruijs/json2nix";
};
};
}
+26
View File
@@ -0,0 +1,26 @@
{
config,
xlib,
...
}:
{
systemd = {
services.nixos-auto-rebuild = {
description = "Auto rebuild NixOS config";
serviceConfig = {
Type = "oneshot";
User = "${xlib.device.username}";
WorkingDirectory = "/etc/nixos";
ExecStart = "gp-ns";
};
};
timers.nixos-auto-rebuild = {
description = "Run NixOS auto rebuild at 4am daily";
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "*-*-* 04:00:00";
Persistent = true;
};
};
};
}
+19
View File
@@ -0,0 +1,19 @@
# https://github.com/ezKEa/aagl-gtk-on-nix
{ inputs, ... }@flakeContext:
{
config,
pkgs,
...
}:
{
imports = [ inputs.aagl.nixosModules.default ];
nix.settings = inputs.aagl.nixConfig; # Set up Cachix
programs = {
anime-game-launcher.enable = true;
#anime-games-launcher.enable = true;
#honkers-railway-launcher.enable = true;
#honkers-launcher.enable = true;
#wavey-launcher.enable = true;
#sleepy-launcher.enable = true;
};
}
+13
View File
@@ -0,0 +1,13 @@
# https://github.com/fufexan/nix-gaming
{ inputs, ... }@flakeContext:
{
config,
pkgs,
...
}:
{
nix.settings = {
substituters = [ "https://nix-gaming.cachix.org" ];
trusted-public-keys = [ "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4=" ];
};
}
+47
View File
@@ -0,0 +1,47 @@
# https://github.com/musnix/musnix
{ inputs, ... }@flakeContext:
{
config,
lib,
pkgs,
...
}:
{
imports = [ inputs.musnix.nixosModules.musnix ];
specialisation = {
"rt_kernel" = {
inheritParentConfig = true;
configuration = {
###
boot.kernelModules = [
"snd-seq"
"snd-rawmidi"
];
services = {
pipewire.enable = lib.mkForce false;
jack = {
jackd.enable = lib.mkForce true;
alsa.enable = true;
loopback.enable = true;
};
};
environment.systemPackages = with pkgs; [
jack2
jack_capture
libjack2
pavucontrol
qjackctl
];
musnix = {
enable = true;
#ffado.enable = true;
rtcqs.enable = true;
kernel.realtime = true;
kernel.packages = pkgs.linuxPackages_latest_rt;
};
###
};
};
};
}
+33
View File
@@ -0,0 +1,33 @@
{ inputs, ... }@flakeContext:
let
pkgs-stable = import inputs.nixpkgs-fingerprint { system = "x86_64-linux"; };
in
{
config,
pkgs,
...
}:
{
security.pam.services.login.fprintAuth = false;
services = {
fprintd = {
enable = true;
package = pkgs-stable.fprintd.override {
libfprint = pkgs-stable.libfprint.overrideAttrs (oldAttrs: {
version = "git";
src = pkgs-stable.fetchFromGitHub {
owner = "ericlinagora";
repo = "libfprint-CS9711";
rev = "c242a40fcc51aec5b57d877bdf3edfe8cb4883fd";
sha256 = "sha256-WFq8sNitwhOOS3eO8V35EMs+FA73pbILRP0JoW/UR80=";
};
nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [
pkgs-stable.opencv
pkgs-stable.cmake
pkgs-stable.doctest
];
});
};
};
};
}
+31
View File
@@ -0,0 +1,31 @@
{ inputs, ... }@flakeContext:
{
config,
pkgs,
...
}:
{
systemd.services.zapret = {
enable = true;
description = "zapret complete";
unitConfig = {
After = [ "network-online.target" ];
Wants = [ "network-online.target" ];
};
wantedBy = [ "multi-user.target" ];
path = [ "/run/current-system/sw" ];
serviceConfig = {
Type = "simple";
Restart = "on-failure";
User = "root";
WorkingDirectory = "${inputs.zapret.script-dir}";
ExecStart = "/run/current-system/sw/bin/bash ./main_script.sh -nointeractive";
ExecStop = "/run/current-system/sw/bin/bash ./stop_and_clean_nft.sh";
};
};
environment = {
systemPackages = with pkgs; [
nftables
];
};
}
+9
View File
@@ -0,0 +1,9 @@
{
lib,
pkgs,
...
}:
{
# imports = [
# ];
}
+128
View File
@@ -0,0 +1,128 @@
{
config,
lib,
...
}:
{
options = {
xlib = {
device = {
type = lib.mkOption {
type = lib.types.enum [
"minimal"
"primary"
"secondary"
"server"
"vds"
"vds-new"
"wsl"
];
default = "minimal";
description = "Type of device for this host.";
};
username = lib.mkOption {
type = lib.types.str;
default = "oqyude";
description = "Username for host.";
};
hostname = lib.mkOption {
type = lib.types.str;
default = "nixos";
description = "Hostname...";
};
};
dirs = {
user-home = lib.mkOption {
type = lib.types.str;
default = "/home/${config.xlib.device.username}";
description = "User home directory.";
};
user-storage = lib.mkOption {
type = lib.types.str;
default = "${config.xlib.dirs.user-home}/Storage";
description = "User storage directory.";
};
archive-drive = lib.mkOption {
type = lib.types.str;
default = "/mnt/archive";
description = "Archive drive mount point.";
};
lamet-drive = lib.mkOption {
type = lib.types.str;
default = "/mnt/lamet";
description = "Lamet drive mount point.";
};
mobile-drive = lib.mkOption {
type = lib.types.str;
default = "/mnt/mobile";
description = "Mobile drive mount point.";
};
therima-drive = lib.mkOption {
type = lib.types.str;
default = "/mnt/therima";
description = "Therima drive mount point.";
};
vetymae-drive = lib.mkOption {
type = lib.types.str;
default = "/mnt/vetymae";
description = "Vetymae drive mount point.";
};
soptur-drive = lib.mkOption {
type = lib.types.str;
default = "/mnt/soptur";
description = "Soptur drive mount point.";
};
wsl-home = lib.mkOption {
type = lib.types.str;
default = "/mnt/c/Users/${config.xlib.device.username}";
description = "WSL home directory.";
};
wsl-storage = lib.mkOption {
type = lib.types.str;
default = "${config.xlib.dirs.wsl-home}/Storage";
description = "WSL storage directory.";
};
server-home = lib.mkOption {
type = lib.types.str;
default = "/home/${config.xlib.device.username}/External";
description = "Server home directory.";
};
server-credentials = lib.mkOption {
type = lib.types.str;
default = "${config.xlib.dirs.server-home}/Credentials/server";
description = "Server credentials directory.";
};
storage = lib.mkOption {
type = lib.types.str;
default = "${config.xlib.dirs.server-home}/Storage";
description = "General storage directory.";
};
calibre-library = lib.mkOption {
type = lib.types.str;
default = "${config.xlib.dirs.server-home}/Books-Library";
description = "Calibre library directory.";
};
music-library = lib.mkOption {
type = lib.types.str;
default = "${config.xlib.dirs.user-home}/Music";
description = "Music library directory.";
};
services-folder = lib.mkOption {
type = lib.types.str;
default = "${config.xlib.dirs.server-home}/Services";
description = "All services folder.";
};
services-mnt-folder = lib.mkOption {
type = lib.types.str;
default = "/mnt/services";
description = "All services folder.";
};
postgresql-folder = lib.mkOption {
type = lib.types.str;
default = "${config.xlib.dirs.services-mnt-folder}/postgresql";
description = "PostgreSQL service folder.";
};
};
};
};
}
+32
View File
@@ -0,0 +1,32 @@
{
config,
xlib,
pkgs,
...
}:
let
user = "snity";
in
{
users = {
users = {
"${user}" = {
name = "${user}";
isNormalUser = true;
group = "users";
description = "Snity";
hashedPassword = "$y$j9T$851xwObfIp7SYzIyFtH.k1$mNofT2sxEAV50Kxgmwvqc6Kj/3B/fJoPP8qgn./siEB";
homeMode = "700";
home = "/home/${user}";
extraGroups = [
"audio"
"disk"
"gamemode"
"networkmanager"
"pipewire"
"wheel"
];
};
};
};
}
+9
View File
@@ -0,0 +1,9 @@
{
lib,
...
}:
{
imports = [
../desktop
];
}
+9
View File
@@ -0,0 +1,9 @@
{
lib,
...
}:
{
imports = [
../desktop
];
}
+35
View File
@@ -0,0 +1,35 @@
{
config,
xlib,
inputs,
...
}:
let
stable = import inputs.nixpkgs-beets {
system = "x86_64-linux";
};
in
{
services.calibre-web = {
package = stable.calibre-web;
enable = true;
# dataDir = "${xlib.dirs.services-mnt-folder}/calibre-web";
options = {
calibreLibrary = "${xlib.dirs.services-mnt-folder}/calibre-web-library";
enableBookUploading = true;
enableKepubify = true;
enableBookConversion = false;
};
listen.ip = "0.0.0.0";
listen.port = 8083;
openFirewall = true;
};
fileSystems."/var/lib/calibre-web" = {
device = "${xlib.dirs.services-mnt-folder}/calibre-web";
options = [
"bind"
"nofail"
];
};
}
+30
View File
@@ -0,0 +1,30 @@
{
lib,
...
}:
{
imports = [
../software/beets
./calibre-web.nix
./immich.nix
./miniflux.nix
./nextcloud.nix
./nginx.nix
./open-webui.nix
./postgresql.nix
./samba.nix
./stirling-pdf.nix
./syncthing.nix
./systemd.nix
./transmission.nix
./uptime-kuma.nix
./netdata.nix
# ./mealie.nix
# ./memos.nix
# ./nfs.nix
# ./node-red.nix
# ./rsync.nix
# ./trilium.nix
# ./zerotier.nix
];
}
+54
View File
@@ -0,0 +1,54 @@
{
config,
lib,
pkgs,
inputs,
xlib,
...
}:
let
master = import inputs.nixpkgs-master {
system = "x86_64-linux";
};
in
{
services = {
immich = {
enable = true;
# package = master.immich;
port = 2283;
host = "0.0.0.0";
openFirewall = true;
accelerationDevices = null;
machine-learning.enable = true;
mediaLocation = "${xlib.dirs.services-mnt-folder}/immich";
database = {
enableVectors = false;
enableVectorChord = true;
};
};
};
# fileSystems."${config.services.immich.mediaLocation}" = {
# device = "${xlib.dirs.services-folder}/immich";
# options = [
# "bind"
# "nofail"
# ];
# };
systemd.tmpfiles.rules = [
"z ${config.services.immich.mediaLocation} 0755 immich immich -"
];
users.users.immich.extraGroups = [
"video"
"render"
];
environment = {
systemPackages = with pkgs; [
immich-cli
];
};
}
+15
View File
@@ -0,0 +1,15 @@
{
config,
...
}:
{
services.mealie = {
enable = true;
listenAddress = "0.0.0.0";
port = 9000;
database.createLocally = true;
settings = {
ALLOW_SIGNUP = "false";
};
};
}
+26
View File
@@ -0,0 +1,26 @@
{
config,
xlib,
...
}:
{
services.memos = {
enable = true;
openFirewall = true;
settings = {
MEMOS_MODE = "prod";
MEMOS_ADDR = "0.0.0.0";
MEMOS_PORT = "5230";
MEMOS_DATA = config.services.memos.dataDir;
MEMOS_DRIVER = "sqlite";
MEMOS_INSTANCE_URL = "http://0.0.0.0:5230";
};
# user = "${xlib.device.username}";
# group = "users";
dataDir = "/mnt/services/memos";
};
systemd.tmpfiles.rules = [
"z /mnt/services/memos 0750 memos memos -"
];
}
+24
View File
@@ -0,0 +1,24 @@
{
config,
inputs,
xlib,
...
}:
{
services.miniflux = {
enable = true;
config = {
ADMIN_USERNAME = "";
CLEANUP_FREQUENCY = 48;
LISTEN_ADDR = "0.0.0.0:6061";
};
# adminCredentialsFile = "${inputs.zeroq-credentials}/services/miniflux/admin-pass.txt";
adminCredentialsFile = config.sops.secrets.minifluxenv.path;
};
sops.secrets.minifluxenv = {
format = "dotenv";
sopsFile = ./secrets/miniflux.env;
mode = "0650";
};
}
+25
View File
@@ -0,0 +1,25 @@
{
config,
inputs,
lib,
pkgs,
...
}:
{
services = {
netdata = {
enable = false;
config = {
web = {
"allow connections from" = "localhost netdata.local *";
"default port" = "19999";
"bind to" = "0.0.0.0";
};
};
};
};
networking.firewall.allowedTCPPorts = [
19999
];
}
+190
View File
@@ -0,0 +1,190 @@
{
config,
lib,
pkgs,
inputs,
xlib,
...
}:
let
master = import inputs.nixpkgs-master {
system = "x86_64-linux";
# config.allowUnfree = true;
# config.allowUnfreePredicate = true;
};
in
{
services = {
nextcloud-whiteboard-server = {
enable = true;
settings = {
NEXTCLOUD_URL = "http://nextcloud.local";
};
secrets = [ "${inputs.zeroq-credentials}/services/nextcloud/jwt-secret.txt" ];
};
nextcloud = {
enable = true;
package = pkgs.nextcloud33;
hostName = "nextcloud.local";
database.createLocally = true;
home = "${xlib.dirs.services-mnt-folder}/nextcloud";
configureRedis = true;
caching = {
redis = true;
memcached = true;
};
maxUploadSize = "5G";
config = {
dbtype = "pgsql";
dbuser = "nextcloud";
dbname = "nextcloud";
adminuser = "oqyude";
adminpassFile = "${inputs.zeroq-credentials}/services/nextcloud/admin-pass.txt";
};
settings = {
log_type = "file";
trusted_domains = [
"nextcloud.zeroq.ru"
"100.64.0.0"
"192.168.1.20"
"localhost"
"nextcloud.local"
];
trusted_proxies = [
"100.64.1.0"
];
overwriteprotocol = "https";
};
extraAppsEnable = true;
appstoreEnable = false;
notify_push = {
enable = false;
bendDomainToLocalhost = true;
};
phpPackage = pkgs.php85;
extraApps = {
inherit (config.services.nextcloud.package.packages.apps)
# gpoddersync
# integration_paperless
# memories
# nextpod
# onlyoffice
# phonetrack
# repod
# sociallogin
bookmarks
calendar
collectives
contacts
cookbook
cospend
dav_push
deck
files_retention
forms
groupfolders
impersonate
mail
music
#tasks?
tasks
# news
notes
# notify_push
polls
previewgenerator
richdocuments
spreed
tables
user_oidc
user_saml
whiteboard
;
# inherit (pkgs.nextcloud31Packages.apps)
# # end_to_end_encryption
# # maps
# tasks
# ;
};
};
collabora-online = {
enable = true;
port = 9980;
# package = master.collabora-online;
settings = {
server_name = "office.zeroq.ru";
ssl = {
enable = false;
termination = true;
ssl_verification = false;
};
net = {
listen = "0.0.0.0";
post_allow.host = [
"0.0.0.0"
];
};
storage.wopi = {
"@allow" = true;
host = [
"0.0.0.0/0"
];
};
};
};
onlyoffice = {
enable = false;
hostname = "0.0.0.0";
jwtSecretFile = "${inputs.zeroq-credentials}/services/onlyoffice/jwt.txt";
};
};
# fonts.packages = [ work.corefonts ];
networking.hosts = {
"localhost" = [ "nextcloud.local" ];
};
systemd.services.nextcloud-config-collabora =
let
inherit (config.services.nextcloud) occ;
wopi_url = "http://localhost:${toString config.services.collabora-online.port}";
public_wopi_url = "https://office.zeroq.ru";
wopi_allowlist = lib.concatStringsSep "," [
"0.0.0.0/0"
];
in
{
wantedBy = [ "multi-user.target" ];
after = [
"nextcloud-setup.service"
"coolwsd.service"
];
requires = [ "coolwsd.service" ];
script = ''
${occ}/bin/nextcloud-occ config:app:set richdocuments wopi_url --value ${lib.escapeShellArg wopi_url}
${occ}/bin/nextcloud-occ config:app:set richdocuments public_wopi_url --value ${lib.escapeShellArg public_wopi_url}
${occ}/bin/nextcloud-occ config:app:set richdocuments wopi_allowlist --value ${lib.escapeShellArg wopi_allowlist}
${occ}/bin/nextcloud-occ richdocuments:setup
'';
serviceConfig = {
Type = "oneshot";
};
};
# fileSystems."${config.services.nextcloud.home}" = {
# device = "${xlib.dirs.services-folder}/nextcloud";
# options = [
# "bind"
# "nofail"
# ];
# };
systemd.tmpfiles.rules = [
"z ${config.services.nextcloud.home} 0750 nextcloud nextcloud -"
];
environment.systemPackages = [
pkgs.nc4nix # Packaging helper for Nextcloud apps
];
}
+24
View File
@@ -0,0 +1,24 @@
{
config,
lib,
xlib,
...
}:
{
systemd.tmpfiles.rules = [
"z /export 0755 nobody nogroup -"
];
services.nfs = {
server = {
enable = false;
exports = ''
/export 192.168.1.20(rw,fsid=0,no_subtree_check) 192.168.1.102(rw,fsid=0,no_subtree_check)
/export/root 192.168.1.20(rw,nohide,insecure,no_subtree_check) 192.168.1.102(rw,nohide,insecure,no_subtree_check)
'';
};
};
# fileSystems."/export/root" = {
# device = "/";
# options = [ "bind" ];
# };
}
+98
View File
@@ -0,0 +1,98 @@
{
config,
lib,
pkgs,
xlib,
...
}:
{
services = {
nginx = {
enable = true;
recommendedGzipSettings = true;
recommendedOptimisation = true;
recommendedProxySettings = true;
recommendedTlsSettings = true;
virtualHosts = {
"nextcloud.local" = {
forceSSL = false;
enableACME = false;
listen = [
{
addr = "100.64.0.0";
port = 10000;
}
{
addr = "192.168.1.20";
port = 10000;
}
];
};
# "localhost:19999" = {
# forceSSL = false;
# enableACME = false;
# listen = [
# {
# addr = "100.64.0.0";
# port = 19999;
# }
# {
# addr = "192.168.1.20";
# port = 19999;
# }
# ];
# };
"zeroq.local" = {
forceSSL = false;
enableACME = false;
root = pkgs.writeTextDir "index.html" ''
<!doctype html>
<html>
<body>
<pre>This server is running in backend.</pre>
</body>
</html>
'';
listen = [
{
addr = "100.64.0.0";
port = 80;
}
{
addr = "192.168.1.20";
port = 80;
}
];
};
# "localhost:8000" = {
# forceSSL = false;
# enableACME = false;
# listen = [
# {
# addr = "100.64.0.0";
# port = 9980;
# }
# {
# addr = "192.168.1.20";
# port = 9980;
# }
# ];
# };
# "office.zeroq.ru" = {
# forceSSL = false;
# enableACME = false;
# locations."/" = {
# proxyPass = "http://onlyoffice.local:8000";
# proxyWebsockets = true;
# };
# extraConfig = ''
# # Force nginx to return relative redirects. This lets the browser
# # figure out the full URL. This ends up working better because it's in
# # front of the reverse proxy and has the right protocol, hostname & port.
# absolute_redirect off;
# '';
# };
};
};
};
}
+21
View File
@@ -0,0 +1,21 @@
{
config,
lib,
pkgs,
xlib,
inputs,
...
}:
{
services.node-red = {
enable = false;
port = 1880;
openFirewall = true;
userDir = "${xlib.dirs.services-mnt-folder}/node-red";
configFile = "${inputs.zeroq-credentials}/configs/node-red/settings.js";
};
systemd.tmpfiles.rules = [
"z ${config.services.node-red.userDir} 0750 node-red node-red -"
];
}
+28
View File
@@ -0,0 +1,28 @@
{
config,
inputs,
lib,
pkgs,
...
}:
{
services = {
open-webui = {
enable = false;
host = "0.0.0.0";
port = 11112;
openFirewall = true;
environment = {
ANONYMIZED_TELEMETRY = "False";
DO_NOT_TRACK = "True";
SCARF_NO_ANALYTICS = "True";
OPENAI_API_BASE_URL = "http://192.168.1.100:1234/v1";
#OLLAMA_API_BASE_URL = "http://127.0.0.1:1234";
WEBUI_AUTH = "True";
ENABLE_SIGNUP = "False";
ENABLE_SIGNUP_PASSWORD_CONFIRMATION = "True";
ENABLE_VERSION_UPDATE_CHECK = "False";
};
};
};
}
+36
View File
@@ -0,0 +1,36 @@
{
config,
inputs,
lib,
pkgs,
xlib,
...
}:
let
master = import inputs.nixpkgs-master {
system = "x86_64-linux";
};
in
{
services = {
postgresql = {
enable = true;
package = pkgs.postgresql_17;
# dataDir = "${xlib.dirs.services-mnt-folder}/postgresql";
};
# postgresqlBackup.enable = true;
};
fileSystems."/var/lib/postgresql" = {
device = "${xlib.dirs.services-mnt-folder}/postgresql";
options = [
"bind"
"nofail"
];
};
systemd.tmpfiles.rules = [
"z ${xlib.dirs.services-mnt-folder}/postgresql 0760 postgres postgres -"
# "z ${config.services.postgresql.dataDir} 0760 postgres postgres -"
];
}
+70
View File
@@ -0,0 +1,70 @@
{
config,
lib,
pkgs,
xlib,
...
}:
{
services = {
rsync = {
enable = true;
jobs = {
archivesta-mobile-music = {
user = "root";
group = "root";
timerConfig = {
OnCalendar = "daily";
Persistent = true;
};
sources = [
"${xlib.dirs.server-home}/Music/"
];
destination = "${xlib.dirs.mobile-drive}/Music/";
settings = {
archive = true;
delete = true;
mkpath = true;
verbose = true;
};
};
archivesta-mobile-neo = {
user = "root";
group = "root";
timerConfig = {
OnCalendar = "daily";
Persistent = true;
};
sources = [
"${xlib.dirs.server-home}/Hosts/epral/Neo Backup/"
];
destination = "${xlib.dirs.mobile-drive}/Neo Backup/";
settings = {
archive = true;
delete = true;
mkpath = true;
verbose = true;
};
};
archivesta-services = {
user = "root";
group = "root";
timerConfig = {
OnCalendar = "daily";
Persistent = true;
};
sources = [
"${xlib.dirs.services-folder}/"
];
destination = "${xlib.dirs.archive-drive}/Services/";
settings = {
archive = true;
delete = true;
mkpath = true;
verbose = true;
};
};
};
};
};
}
+53
View File
@@ -0,0 +1,53 @@
{
config,
xlib,
...
}:
{
services.samba = {
enable = true;
settings = {
global = {
"invalid users" = [ ];
"passwd program" = "/run/wrappers/bin/passwd %u";
security = "user";
};
nixos = {
"path" = "/etc/nixos";
"browseable" = "yes";
"read only" = "no";
"valid users" = "${xlib.device.username}";
"guest ok" = "no";
"writable" = "yes";
"create mask" = 755;
"directory mask" = 755;
"force user" = "${xlib.device.username}";
"force group" = "users";
};
root = {
"path" = "/";
"browseable" = "yes";
"read only" = "no";
"valid users" = "${xlib.device.username}";
"guest ok" = "no";
"writable" = "yes";
#"create mask" = 0644;
#"directory mask" = 0644;
"force user" = "root";
"force group" = "root";
};
"${xlib.device.username}" = {
"path" = "${xlib.dirs.server-home}";
"browseable" = "yes";
"read only" = "no";
"valid users" = "${xlib.device.username}";
"guest ok" = "no";
"writable" = "yes";
"create mask" = 700;
"directory mask" = 700;
"force user" = "${xlib.device.username}";
"force group" = "users";
};
};
};
}
+8
View File
@@ -0,0 +1,8 @@
ADMIN_USERNAME=ENC[AES256_GCM,data:OhS8ZIE0Tw==,iv:LChSD428nAuCW0pIfJ6Jc9Vor6ZW+XbrU0zZa2SQ29E=,tag:8I26KuAkMP7lXInuoiIP2Q==,type:str]
ADMIN_PASSWORD=ENC[AES256_GCM,data:X7k4qIshq5cpB1m6hNGRlw==,iv:JZoTU4LJ8nw3T2dUTdODgDRH6gXiEzvPVp4F9E18pnw=,tag:03nY8zBntbpB2AJS2mizow==,type:str]
sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXcjByc2NHcEd1M1hmL3ZU\nWGRsMXBGYUtKTHFBOExDOU10S3NJTXd5WVdRClMzcHZDZVhDMTNLbEFVRDhHb3pL\nVnRXWXJTaTZCcDFRdzFsNG94NURwVXMKLS0tIFdpajcyaGdLRXM2YTRvcE55N2M5\nV2N3TEFDajhkRHVRMDQ5bTNWeHh0TTQKqwiC/ZOjLBsqO5qLvL2WtLrl2nOjb1fZ\nHxiCSutJfgGfftfk9h7nVK/ee5O3HvUlgXOjaFeD1CZMqukOIpZJhw==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_0__map_recipient=age13l2gtk0nzr484zprp7e0pkrt0ne0j4asyn2pjmlaw73nte7t7d8q4sqtxm
sops_lastmodified=2025-10-09T22:05:48Z
sops_mac=ENC[AES256_GCM,data:1SzZFKwcKjGggKpo03T23kcYazz+bJJ3mWgQMGg+1sBkmDRxmsfiUV2bjhQOeuJIBJn5yRomQvgUAjYGNsLp8dfasChZ65KiTVSCd1rDbN2gT4tIzwWM6Dqs6LaMosU0eYzPq3JTLphy+KjLMMJtb46DSY0yf8izOV1N9xdGaLc=,iv:4vslV1ooPd/m+khKOUgFHBWoDf7EBqJmmC4TkzqwRFc=,tag:OfhcRMQsPevSn41hsyWFOg==,type:str]
sops_unencrypted_suffix=_unencrypted
sops_version=3.11.0
+17
View File
@@ -0,0 +1,17 @@
{
config,
inputs,
...
}:
# let
# pkgs-stable = import inputs.nixpkgs-stable { system = "x86_64-linux"; };
# in
{
services.stirling-pdf = {
enable = false;
# package = pkgs-stable.stirling-pdf;
environment = {
SERVER_PORT = 6060;
};
};
}
+23
View File
@@ -0,0 +1,23 @@
{
config,
xlib,
inputs,
...
}:
let
master = import inputs.nixpkgs-master {
system = "x86_64-linux";
};
in
{
services.syncthing = {
enable = true;
# package = master.syncthing;
systemService = true;
guiAddress = "0.0.0.0:8384";
configDir = "${xlib.dirs.storage}/Syncthing/${xlib.device.hostname}";
dataDir = "${xlib.dirs.server-home}";
group = "users";
user = "${xlib.device.username}";
};
}
+64
View File
@@ -0,0 +1,64 @@
{
config,
lib,
pkgs,
xlib,
...
}:
{
systemd = {
services = {
rsync-archivesta = {
# Archivesta
description = "Backup data using rsync";
requisite = [ "mnt-archive.mount" ]; # hard-code
script = ''
${pkgs.rsync}/bin/rsync -rtv --delete ${xlib.dirs.services-folder}/ ${xlib.dirs.archive-drive}/Services/
'';
serviceConfig = {
Type = "oneshot";
User = "root";
Group = "root";
Nice = 19;
IOSchedulingClass = "idle";
};
};
rsync-archivesta-lite = {
# Archivesta Lite
description = "Backup data using rsync";
requisite = [ "mnt-mobile.mount" ]; # hard-code
script = ''
${pkgs.rsync}/bin/rsync -rtv --delete ${xlib.dirs.server-home}/Music/ ${xlib.dirs.mobile-drive}/Music/
${pkgs.rsync}/bin/rsync -rtv --delete "${xlib.dirs.server-home}/Hosts/epral/Neo Backup/" "${xlib.dirs.mobile-drive}/Neo Backup/"
'';
serviceConfig = {
Type = "oneshot";
User = "root";
Group = "root";
Nice = 19;
IOSchedulingClass = "idle";
};
};
};
timers = {
rsync-archivesta = {
description = "Run rsync backup daily";
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "daily";
Persistent = true;
Unit = "rsync-archivesta.service";
};
};
rsync-archivesta-lite = {
description = "Run rsync backup weekly";
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "weekly";
Persistent = true;
Unit = "rsync-archivesta-lite.service";
};
};
};
};
}
+25
View File
@@ -0,0 +1,25 @@
{
config,
pkgs,
xlib,
...
}:
{
services.transmission = {
enable = false;
#credentialsFile = "${xlib.dirs.server-home}/server/transmission/settings.json";
openRPCPort = true;
package = pkgs.transmission_4;
user = "${xlib.device.username}";
group = "users";
settings = {
download-dir = "${xlib.dirs.server-home}/Downloads";
incomplete-dir = "${xlib.dirs.server-home}/Downloads/Temp";
incomplete-dir-enabled = true;
rpc-bind-address = "0.0.0.0";
rpc-port = 9091;
rpc-whitelist-enabled = false;
umask = 0;
};
};
}
+20
View File
@@ -0,0 +1,20 @@
{
config,
xlib,
...
}:
{
services.trilium-server = {
enable = false;
nginx = {
enable = true;
hostName = "trilium";
};
host = "0.0.0.0";
dataDir = "/mnt/services/trilium";
};
systemd.tmpfiles.rules = [
"z /mnt/services/trilium 0750 trilium trilium -"
];
}
+29
View File
@@ -0,0 +1,29 @@
{
config,
lib,
pkgs,
xlib,
inputs,
...
}:
{
services.uptime-kuma = {
enable = true;
settings = {
PORT = "4001";
HOST = "0.0.0.0";
};
};
systemd.tmpfiles.rules = [
"z ${xlib.dirs.services-mnt-folder}/uptime-kuma 0755 nobody nogroup -"
];
fileSystems."/var/lib/private/uptime-kuma" = {
device = "${xlib.dirs.services-mnt-folder}/uptime-kuma";
options = [
"bind"
"nofail"
];
};
}
+23
View File
@@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
...
}:
{
services = {
zerotierone = {
enable = false;
joinNetworks = [
"db64858fedde087e"
];
port = 9993;
};
};
# environment = {
# systemPackages = with pkgs; [
# zerotierone
# ];
# };
}
+19
View File
@@ -0,0 +1,19 @@
{
config,
lib,
pkgs,
xlib,
...
}:
{
services.tts.servers = {
russian = {
enable = true;
port = 5301;
};
english = {
#enable = false;
port = 5300;
};
};
}
+47
View File
@@ -0,0 +1,47 @@
{ pkgs, ... }:
#? 🙏 https://github.com/ViZiD/dotfiles/blob/master/modules/shared/zapret.nix
#? https://github.com/Flowseal/zapret-discord-youtube/blob/main/general.bat
let
list-general = pkgs.fetchurl {
# https://github.com/Flowseal/zapret-discord-youtube/blob/main/lists/list-general.txt
url = "https://raw.githubusercontent.com/Flowseal/zapret-discord-youtube/779853740f9c957551685bdebf59ad3a788b5004/lists/list-general.txt";
sha256 = "sha256-/9dYk5fiVLfN+bY0STlqutnRQQoInS9NBGg9fWHZedk=";
};
in
{
services.zapret = {
enable = true;
udpSupport = true;
udpPorts = [
"443"
"50000:50099"
];
params = [
"--filter-tcp=80"
"--hostlist=${list-general}"
"--dpi-desync=fake,split2"
"--dpi-desync-autottl=2"
"--dpi-desync-fooling=md5sig"
"--new"
"--filter-tcp=443"
"--hostlist=${list-general}"
"--dpi-desync=fake,multidisorder"
"--dpi-desync-split-pos=midsld"
"--dpi-desync-repeats=8"
"--dpi-desync-fooling=md5sig,badseq"
"--new"
"--filter-udp=443"
"--hostlist=${list-general}"
"--dpi-desync=fake"
"--dpi-desync-repeats=6"
"--new"
"--filter-udp=50000-50099"
"--filter-l7=discord,stun"
"--dpi-desync=fake"
"--dpi-desync-repeats=6"
];
};
}
+54
View File
@@ -0,0 +1,54 @@
{
config,
pkgs,
xlib,
...
}:
{
# services.zapret = {
# enable = true;
# params = [
# "--dpi-desync=fake,disorder2"
# "--dpi-desync-ttl=1"
# "--dpi-desync-autottl=2"
# ];
# };
systemd.services.zapret = {
enable = true;
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
description = "Custom Script Service";
path = with pkgs; [
sudo
git
nftables
iproute2
zapret
coreutils
];
unitConfig = {
After = [ "network-online.target" ];
Wants = [ "network-online.target" ];
};
serviceConfig = {
Type = "simple";
WorkingDirectory = "${xlib.dirs.user-services}/zapret";
User = "root";
ExecStart = ''
/run/current-system/sw/bin/bash ${xlib.dirs.user-services}/zapret/main_script.sh -nointeractive
'';
ExecStop = ''
/run/current-system/sw/bin/bash ${xlib.dirs.user-services}/zapret/stop_and_clean_nft.sh
'';
# ExecStopPost = ''
# /run/current-system/sw/bin/echo "Сервис завершён"
# '';
PIDFile = ''
/run/zapret_discord_youtube.pid
'';
# Restart = "on-failure";
# RestartSec = "5s";
};
};
}
+12
View File
@@ -0,0 +1,12 @@
{
config,
lib,
pkgs,
xlib,
...
}:
{
environment.systemPackages = [
pkgs.aichat
];
}
+96
View File
@@ -0,0 +1,96 @@
{
config,
inputs,
lib,
pkgs,
xlib,
...
}:
let
stable = import inputs.nixpkgs-beets {
system = "x86_64-linux";
};
in
let
# depsOverlay = import ./dependencies.nix {
# # ./dependencies-full.nix if broken
# inherit (pkgs) fetchurl fetchgit fetchhg;
# inherit pkgs;
# };
# python3 = pkgs.python3.override {
# packageOverrides = depsOverlay;
# };
beetsEnv = stable.python313.withPackages (
ps: with ps; [
beautifulsoup4
beetcamp
beets
certifi
charset-normalizer
colorama
confuse
discogs-client
exceptiongroup
filetype
h11
httpcore
httpx
httpx-socks
socksio
idna
jellyfish
langdetect
mediafile
munkres
musicbrainzngs
mutagen
oauthlib
packaging
pillow
platformdirs
pycountry
pylast
python-dateutil
pyyaml
requests
six
sniffio
soupsieve
typing-extensions
unidecode
urllib3
]
);
in
{
# nixpkgs.config.allowBroken = true;
users = {
users = {
"${xlib.device.username}" = {
packages = [
beetsEnv
pkgs.mp3gain
pkgs.imagemagick
#ffmpeg
];
};
};
};
fileSystems."/mnt/beets/music" = {
device = "/home/${xlib.device.username}/Music"; # "${xlib.dirs.vetymae-drive}/Users/User/Music"
options = [
"bind"
"uid=1000"
"gid=1000"
"fmask=0077"
"dmask=0077"
"nofail"
#"x-systemd.device-timeout=0"
];
};
systemd.tmpfiles.rules = [
"z /mnt/beets 0700 ${xlib.device.username} users -" # beets absolute paths
];
}
+573
View File
@@ -0,0 +1,573 @@
# Generated by pip2nix 0.8.0.dev1
# See https://github.com/nix-community/pip2nix
{
pkgs,
fetchurl,
fetchgit,
fetchhg,
}:
self: super: {
"PyYAML" = super.buildPythonPackage rec {
pname = "PyYAML";
version = "6.0.2";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz";
sha256 = "0gmwggzm0j0iprx074g5hah91y2f68sfhhldq0f8crddj7ndk16m";
};
format = "setuptools";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"Unidecode" = super.buildPythonPackage rec {
pname = "Unidecode";
version = "1.3.8";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/84/b7/6ec57841fb67c98f52fc8e4a2d96df60059637cba077edc569a302a8ffc7/Unidecode-1.3.8-py3-none-any.whl";
sha256 = "0fgxj6h9lkjq4saynkjqf2wb9plsr5wyg3xxld482vv9wqfacc6i";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"anyio" = super.buildPythonPackage rec {
pname = "anyio";
version = "4.7.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/a0/7a/4daaf3b6c08ad7ceffea4634ec206faeff697526421c20f07628c7372156/anyio-4.7.0-py3-none-any.whl";
sha256 = "0lp30wfn1hs2wvaz3wadzwwcb3l9ii4b1k78yzzscaxl79rc6q7a";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."exceptiongroup"
self."idna"
self."sniffio"
self."typing-extensions"
];
};
"beautifulsoup4" = super.buildPythonPackage rec {
pname = "beautifulsoup4";
version = "4.12.3";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl";
sha256 = "1vc2w3wvnhbp2q287ilzjsiqyvd0vc5s52ysalz32481yk4ph25q";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."soupsieve"
];
};
"beetcamp" = super.buildPythonPackage rec {
pname = "beetcamp";
version = "0.21.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/6c/d3/94cad1ba1e65a9445655968a6dcdd528cb1352e2389f0921a9f8c0ccd4a0/beetcamp-0.21.0-py3-none-any.whl";
sha256 = "08mxqmckg2fx9rkm5a1n9zs2sjccjj75vgxac22xjyi3fw1k0wz2";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
#self."beets" # its doesnt matter?
self."httpx"
self."packaging"
self."pycountry"
];
};
"beets" = super.buildPythonPackage rec {
pname = "beets";
version = "2.2.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/f3/44/1c53c2ac111e5526083e58f50a22504ad7c609be1ce660c0339938a42c33/beets-2.2.0-py3-none-any.whl";
sha256 = "076hl1j74cgyh6n1piwprnzb89gihy2vmajm8lzfhy1jjcrfrpbd";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."PyYAML"
self."Unidecode"
self."confuse"
self."jellyfish"
self."mediafile"
self."munkres"
self."musicbrainzngs"
self."platformdirs"
self."typing-extensions"
# ext
self."requests" # For spotify, deezer, embedart, fetchart, lyrics
self."python3-discogs-client" # For discogs
self."pylast" # For lastgenre
# self."beetcamp" # Another
];
};
"certifi" = super.buildPythonPackage rec {
pname = "certifi";
version = "2024.12.14";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl";
sha256 = "0mpccx4yscnk6rhl12fk8wpgwrpq62m4w23k27y4wip9bfjgfx8j";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"charset-normalizer" = super.buildPythonPackage rec {
pname = "charset-normalizer";
version = "3.4.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz";
sha256 = "18sfsqpdmxbddr3g3yg0sln10ghq4sp0vl2xb1b5p9v8rlc1y9a4";
};
format = "setuptools";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"colorama" = super.buildPythonPackage rec {
pname = "colorama";
version = "0.4.6";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl";
sha256 = "1ijz53xpmxds2qf02l9yf0rnp7bznwh3ci4xkw8wmh5cyn8rj7ag";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"confuse" = super.buildPythonPackage rec {
pname = "confuse";
version = "2.0.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/32/1f/cf496479814d41fc252004482deeb90b740b4a6a391a3355c0b11d7e0abf/confuse-2.0.1-py3-none-any.whl";
sha256 = "0amxm8vnxcayh7inahvj3fzj33n8gs8lvcfaicqrpjz2f2y5p7lv";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."PyYAML"
];
};
"exceptiongroup" = super.buildPythonPackage rec {
pname = "exceptiongroup";
version = "1.3.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl";
sha256 = "044alxyhkfdlr5z3xlpnf5lv78310bnsgnkdmm669l0k1ip1w4ad";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."typing-extensions"
];
};
"filetype" = super.buildPythonPackage rec {
pname = "filetype";
version = "1.2.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/18/79/1b8fa1bb3568781e84c9200f951c735f3f157429f44be0495da55894d620/filetype-1.2.0-py2.py3-none-any.whl";
sha256 = "099d3igvmfcdgg9dcylz8advva5n3qpplsf8gb7l24hqh1l1prvw";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"h11" = super.buildPythonPackage rec {
pname = "h11";
version = "0.14.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl";
sha256 = "0qd7z9p38dwx215048q708vd1sn2abdh1mb3hg66ii2ip324mzp3";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"httpcore" = super.buildPythonPackage rec {
pname = "httpcore";
version = "1.0.7";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl";
sha256 = "1p8f8bnrir1d50s6z19jndca98qghgqrr7rx6syxaq627psgizx3";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."certifi"
self."h11"
];
};
"httpx" = super.buildPythonPackage rec {
pname = "httpx";
version = "0.28.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl";
sha256 = "1barpaw8as8xb7b2bsmzdmdbq5nqljlq5jhlz3xcgy0hq76gq2fr";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."anyio"
self."certifi"
self."httpcore"
self."idna"
];
};
"idna" = super.buildPythonPackage rec {
pname = "idna";
version = "3.10";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl";
sha256 = "1lw72a5swas501zvkpd6dsryj5hzjijqxs3526kbp7151md1jvcl";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
# "jellyfish" = super.buildPythonPackage rec { # That is Rust package
# pname = "jellyfish";
# version = "1.1.3";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/5b/3a/f607d7d44ee5cbad51ce8e2966bde112789eeb53633558f500bc4e44c053/jellyfish-1.1.3.tar.gz";
# sha256 = "17wgy021wsp8jj95v638kfk34r9yzbry3q7shnglj5npmgfs22v5";
# };
# format = "setuptools";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [ ];
# };
"langdetect" = super.buildPythonPackage rec {
pname = "langdetect";
version = "1.0.9";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/0e/72/a3add0e4eec4eb9e2569554f7c70f4a3c27712f40e3284d483e88094cc0e/langdetect-1.0.9.tar.gz";
sha256 = "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb";
};
format = "setuptools";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."six"
];
};
"mediafile" = super.buildPythonPackage rec {
pname = "mediafile";
version = "0.13.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/9f/b0/363b4d1443a593398f9d3784f406385f075e8fd0991c35356e73fc37638a/mediafile-0.13.0-py3-none-any.whl";
sha256 = "1jqlwmwpgn0fxkbxrj8y5a4wr3ikwgs2rsc678hbaw861qyii3fd";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."filetype"
self."mutagen"
];
};
"munkres" = super.buildPythonPackage rec {
pname = "munkres";
version = "1.1.4";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/90/ab/0301c945a704218bc9435f0e3c88884f6b19ef234d8899fb47ce1ccfd0c9/munkres-1.1.4-py2.py3-none-any.whl";
sha256 = "0apdpkbhg4wq5pis5d2mkqg46ikwix5nwcm2mrjxi04499yqc0bb";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"musicbrainzngs" = super.buildPythonPackage rec {
pname = "musicbrainzngs";
version = "0.7.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/6d/fd/cef7b2580436910ccd2f8d3deec0f3c81743e15c0eb5b97dde3fbf33c0c8/musicbrainzngs-0.7.1-py2.py3-none-any.whl";
sha256 = "040s1q4ia6gl2bjjxrjs384980854s9za28b55r0lk0hfpwshhg8";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"mutagen" = super.buildPythonPackage rec {
pname = "mutagen";
version = "1.47.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/b0/7a/620f945b96be1f6ee357d211d5bf74ab1b7fe72a9f1525aafbfe3aee6875/mutagen-1.47.0-py3-none-any.whl";
sha256 = "06d7miq4z6m7j8rx2czkmqhgbjb2bwjagfz5v0wraylhqm86zngd";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"oauthlib" = super.buildPythonPackage rec {
pname = "oauthlib";
version = "3.2.2";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl";
sha256 = "1jpvcxq0xr3z50fdg828in1icgz8cfcy3sc04r85vqhkmjdg4fc1";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"packaging" = super.buildPythonPackage rec {
pname = "packaging";
version = "24.2";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl";
sha256 = "0nd7a421brjgd4prm8fbs8a6bcv4n1yplgxalgs02p16rnyb3aq9";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"pillow" = super.buildPythonPackage rec {
pname = "pillow";
version = "11.0.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/a5/26/0d95c04c868f6bdb0c447e3ee2de5564411845e36a858cfd63766bc7b563/pillow-11.0.0.tar.gz";
sha256 = "0fbpcwgiac19ap0h1qa1imsqhq6vxv8kg67zkgm3y05c4jpwpfkj";
};
format = "setuptools";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"platformdirs" = super.buildPythonPackage rec {
pname = "platformdirs";
version = "4.3.6";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl";
sha256 = "1yy39iay8fdb3c1r4gm011lla1sk1mc9fsw300wi1f4a83hpbrbk";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"pycountry" = super.buildPythonPackage rec {
pname = "pycountry";
version = "24.6.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/b1/ec/1fb891d8a2660716aadb2143235481d15ed1cbfe3ad669194690b0604492/pycountry-24.6.1-py3-none-any.whl";
sha256 = "0vz0dhfkbjld5jagh9wafwy27k5d83bmd5fkxy74y8fp3hwzp97i";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"pylast" = super.buildPythonPackage rec {
pname = "pylast";
version = "5.3.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/9b/57/e25206d012afe3fe5e3336a875babb5413b81c00706411a645a38185ad3b/pylast-5.3.0-py3-none-any.whl";
sha256 = "023ki92jgc9mk2k9c4li48zf23yz2wn022m1rsjj9bsvn3f7ri2c";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."httpx"
];
};
"python-dateutil" = super.buildPythonPackage rec {
pname = "python-dateutil";
version = "2.9.0.post0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl";
sha256 = "09q48zvsbagfa3w87zkd2c5xl54wmb9rf2hlr20j4a5fzxxvrcm8";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."six"
];
};
"python3-discogs-client" = super.buildPythonPackage rec {
pname = "python3-discogs-client";
version = "2.7.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/02/eb/b3d321440728addb72296e75ae2bfddd8fd3518b5ce5bd54a1ad821227a2/python3_discogs_client-2.7.1-py3-none-any.whl";
sha256 = "0i3lfdn2ncxfvmmldg31gmdv7vdcicjl890mihncxa48yb9g7daz";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."oauthlib"
self."python-dateutil"
self."requests"
];
};
"requests" = super.buildPythonPackage rec {
pname = "requests";
version = "2.32.3";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl";
sha256 = "1inwsrhx0m16q0wa1z6dfm8i8xkrfns73xm25arcwwy70gz1qxkh";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."certifi"
self."charset-normalizer"
self."idna"
self."urllib3"
];
};
"six" = super.buildPythonPackage rec {
pname = "six";
version = "1.17.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl";
sha256 = "0x1jdic712dylbnyiqdj4xyxrlx0gaacynmbmkfiym4hxn8z68a7";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"sniffio" = super.buildPythonPackage rec {
pname = "sniffio";
version = "1.3.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl";
sha256 = "18i50l85yppn9w1ily8m342yd577h0bg8y24hkfzvq7is4ca8v9g";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"soupsieve" = super.buildPythonPackage rec {
pname = "soupsieve";
version = "2.6";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl";
sha256 = "1jfc0b39kwnh4n30458mr8gmh50mx3k5zxghm6sy9djgdvq4yb77";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"typing-extensions" = super.buildPythonPackage rec {
pname = "typing-extensions";
version = "4.12.2";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl";
sha256 = "03bhjivpvdhn4c3x0963z89hv7b5vxr415akd1fgiwz0a41wmr84";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"urllib3" = super.buildPythonPackage rec {
pname = "urllib3";
version = "2.3.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl";
sha256 = "1pz380a93mhdrzx5003inw5pm5n0fh1xazcbnjxzsyw6d79rmvhw";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
}
+57
View File
@@ -0,0 +1,57 @@
{
config,
lib,
pkgs,
xlib,
...
}:
let
depsOverlay = import ./dependencies.nix {
# ./dependencies-full.nix if broken
inherit (pkgs) fetchurl fetchgit fetchhg;
inherit pkgs;
};
python3 = pkgs.python3.override {
packageOverrides = depsOverlay;
};
beetsEnv = python3.withPackages (
ps: with pkgs.python313Packages; [
#pkgs.beets # Из nixpkgs (проверь версию!) или оверлея
beautifulsoup4 # Из nixpkgs
certifi # Из nixpkgs
requests # Из nixpkgs
pyyaml # Из nixpkgs
unidecode # Из nixpkgs
pylast # Из nixpkgs
jellyfish # Из nixpkgs, если есть, или оверлея
confuse
#httpcore
httpx
packaging
pycountry
typing-extensions
anyio
ps.python3-discogs-client
ps.beetcamp # Из оверлея
]
);
in
{
systemd.tmpfiles.rules = [
"z /mnt/beets 0700 ${xlib.device.username} users -" # beets absolute paths
];
users = {
users = {
"${xlib.device.username}" = {
packages = [
beetsEnv
pkgs.beets
pkgs.mp3gain
pkgs.imagemagick
#pkgs.ffmpeg
];
};
};
};
}
@@ -0,0 +1,573 @@
# Generated by pip2nix 0.8.0.dev1
# See https://github.com/nix-community/pip2nix
{
pkgs,
fetchurl,
fetchgit,
fetchhg,
}:
self: super: {
"PyYAML" = super.buildPythonPackage rec {
pname = "PyYAML";
version = "6.0.2";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz";
sha256 = "0gmwggzm0j0iprx074g5hah91y2f68sfhhldq0f8crddj7ndk16m";
};
format = "setuptools";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"Unidecode" = super.buildPythonPackage rec {
pname = "Unidecode";
version = "1.3.8";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/84/b7/6ec57841fb67c98f52fc8e4a2d96df60059637cba077edc569a302a8ffc7/Unidecode-1.3.8-py3-none-any.whl";
sha256 = "0fgxj6h9lkjq4saynkjqf2wb9plsr5wyg3xxld482vv9wqfacc6i";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"anyio" = super.buildPythonPackage rec {
pname = "anyio";
version = "4.7.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/a0/7a/4daaf3b6c08ad7ceffea4634ec206faeff697526421c20f07628c7372156/anyio-4.7.0-py3-none-any.whl";
sha256 = "0lp30wfn1hs2wvaz3wadzwwcb3l9ii4b1k78yzzscaxl79rc6q7a";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."exceptiongroup"
self."idna"
self."sniffio"
self."typing-extensions"
];
};
"beautifulsoup4" = super.buildPythonPackage rec {
pname = "beautifulsoup4";
version = "4.12.3";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl";
sha256 = "1vc2w3wvnhbp2q287ilzjsiqyvd0vc5s52ysalz32481yk4ph25q";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."soupsieve"
];
};
"beetcamp" = super.buildPythonPackage rec {
pname = "beetcamp";
version = "0.21.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/6c/d3/94cad1ba1e65a9445655968a6dcdd528cb1352e2389f0921a9f8c0ccd4a0/beetcamp-0.21.0-py3-none-any.whl";
sha256 = "08mxqmckg2fx9rkm5a1n9zs2sjccjj75vgxac22xjyi3fw1k0wz2";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
#self."beets" # its doesnt matter?
self."httpx"
self."packaging"
self."pycountry"
];
};
"beets" = super.buildPythonPackage rec {
pname = "beets";
version = "2.2.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/f3/44/1c53c2ac111e5526083e58f50a22504ad7c609be1ce660c0339938a42c33/beets-2.2.0-py3-none-any.whl";
sha256 = "076hl1j74cgyh6n1piwprnzb89gihy2vmajm8lzfhy1jjcrfrpbd";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."PyYAML"
self."Unidecode"
self."confuse"
self."jellyfish"
self."mediafile"
self."munkres"
self."musicbrainzngs"
self."platformdirs"
self."typing-extensions"
# ext
self."requests" # For spotify, deezer, embedart, fetchart, lyrics
self."python3-discogs-client" # For discogs
self."pylast" # For lastgenre
self."beetcamp" # Another
];
};
"certifi" = super.buildPythonPackage rec {
pname = "certifi";
version = "2024.12.14";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl";
sha256 = "0mpccx4yscnk6rhl12fk8wpgwrpq62m4w23k27y4wip9bfjgfx8j";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"charset-normalizer" = super.buildPythonPackage rec {
pname = "charset-normalizer";
version = "3.4.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz";
sha256 = "18sfsqpdmxbddr3g3yg0sln10ghq4sp0vl2xb1b5p9v8rlc1y9a4";
};
format = "setuptools";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"colorama" = super.buildPythonPackage rec {
pname = "colorama";
version = "0.4.6";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl";
sha256 = "1ijz53xpmxds2qf02l9yf0rnp7bznwh3ci4xkw8wmh5cyn8rj7ag";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"confuse" = super.buildPythonPackage rec {
pname = "confuse";
version = "2.0.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/32/1f/cf496479814d41fc252004482deeb90b740b4a6a391a3355c0b11d7e0abf/confuse-2.0.1-py3-none-any.whl";
sha256 = "0amxm8vnxcayh7inahvj3fzj33n8gs8lvcfaicqrpjz2f2y5p7lv";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."PyYAML"
];
};
"exceptiongroup" = super.buildPythonPackage rec {
pname = "exceptiongroup";
version = "1.3.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl";
sha256 = "044alxyhkfdlr5z3xlpnf5lv78310bnsgnkdmm669l0k1ip1w4ad";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."typing-extensions"
];
};
"filetype" = super.buildPythonPackage rec {
pname = "filetype";
version = "1.2.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/18/79/1b8fa1bb3568781e84c9200f951c735f3f157429f44be0495da55894d620/filetype-1.2.0-py2.py3-none-any.whl";
sha256 = "099d3igvmfcdgg9dcylz8advva5n3qpplsf8gb7l24hqh1l1prvw";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"h11" = super.buildPythonPackage rec {
pname = "h11";
version = "0.14.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl";
sha256 = "0qd7z9p38dwx215048q708vd1sn2abdh1mb3hg66ii2ip324mzp3";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"httpcore" = super.buildPythonPackage rec {
pname = "httpcore";
version = "1.0.7";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl";
sha256 = "1p8f8bnrir1d50s6z19jndca98qghgqrr7rx6syxaq627psgizx3";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."certifi"
self."h11"
];
};
"httpx" = super.buildPythonPackage rec {
pname = "httpx";
version = "0.28.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl";
sha256 = "1barpaw8as8xb7b2bsmzdmdbq5nqljlq5jhlz3xcgy0hq76gq2fr";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."anyio"
self."certifi"
self."httpcore"
self."idna"
];
};
"idna" = super.buildPythonPackage rec {
pname = "idna";
version = "3.10";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl";
sha256 = "1lw72a5swas501zvkpd6dsryj5hzjijqxs3526kbp7151md1jvcl";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
# "jellyfish" = super.buildPythonPackage rec { # That is Rust package
# pname = "jellyfish";
# version = "1.1.3";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/5b/3a/f607d7d44ee5cbad51ce8e2966bde112789eeb53633558f500bc4e44c053/jellyfish-1.1.3.tar.gz";
# sha256 = "17wgy021wsp8jj95v638kfk34r9yzbry3q7shnglj5npmgfs22v5";
# };
# format = "setuptools";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [ ];
# };
"langdetect" = super.buildPythonPackage rec {
pname = "langdetect";
version = "1.0.9";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/0e/72/a3add0e4eec4eb9e2569554f7c70f4a3c27712f40e3284d483e88094cc0e/langdetect-1.0.9.tar.gz";
sha256 = "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb";
};
format = "setuptools";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."six"
];
};
"mediafile" = super.buildPythonPackage rec {
pname = "mediafile";
version = "0.13.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/9f/b0/363b4d1443a593398f9d3784f406385f075e8fd0991c35356e73fc37638a/mediafile-0.13.0-py3-none-any.whl";
sha256 = "1jqlwmwpgn0fxkbxrj8y5a4wr3ikwgs2rsc678hbaw861qyii3fd";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."filetype"
self."mutagen"
];
};
"munkres" = super.buildPythonPackage rec {
pname = "munkres";
version = "1.1.4";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/90/ab/0301c945a704218bc9435f0e3c88884f6b19ef234d8899fb47ce1ccfd0c9/munkres-1.1.4-py2.py3-none-any.whl";
sha256 = "0apdpkbhg4wq5pis5d2mkqg46ikwix5nwcm2mrjxi04499yqc0bb";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"musicbrainzngs" = super.buildPythonPackage rec {
pname = "musicbrainzngs";
version = "0.7.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/6d/fd/cef7b2580436910ccd2f8d3deec0f3c81743e15c0eb5b97dde3fbf33c0c8/musicbrainzngs-0.7.1-py2.py3-none-any.whl";
sha256 = "040s1q4ia6gl2bjjxrjs384980854s9za28b55r0lk0hfpwshhg8";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"mutagen" = super.buildPythonPackage rec {
pname = "mutagen";
version = "1.47.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/b0/7a/620f945b96be1f6ee357d211d5bf74ab1b7fe72a9f1525aafbfe3aee6875/mutagen-1.47.0-py3-none-any.whl";
sha256 = "06d7miq4z6m7j8rx2czkmqhgbjb2bwjagfz5v0wraylhqm86zngd";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"oauthlib" = super.buildPythonPackage rec {
pname = "oauthlib";
version = "3.2.2";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl";
sha256 = "1jpvcxq0xr3z50fdg828in1icgz8cfcy3sc04r85vqhkmjdg4fc1";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"packaging" = super.buildPythonPackage rec {
pname = "packaging";
version = "24.2";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl";
sha256 = "0nd7a421brjgd4prm8fbs8a6bcv4n1yplgxalgs02p16rnyb3aq9";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"pillow" = super.buildPythonPackage rec {
pname = "pillow";
version = "11.0.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/a5/26/0d95c04c868f6bdb0c447e3ee2de5564411845e36a858cfd63766bc7b563/pillow-11.0.0.tar.gz";
sha256 = "0fbpcwgiac19ap0h1qa1imsqhq6vxv8kg67zkgm3y05c4jpwpfkj";
};
format = "setuptools";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"platformdirs" = super.buildPythonPackage rec {
pname = "platformdirs";
version = "4.3.6";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl";
sha256 = "1yy39iay8fdb3c1r4gm011lla1sk1mc9fsw300wi1f4a83hpbrbk";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"pycountry" = super.buildPythonPackage rec {
pname = "pycountry";
version = "24.6.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/b1/ec/1fb891d8a2660716aadb2143235481d15ed1cbfe3ad669194690b0604492/pycountry-24.6.1-py3-none-any.whl";
sha256 = "0vz0dhfkbjld5jagh9wafwy27k5d83bmd5fkxy74y8fp3hwzp97i";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"pylast" = super.buildPythonPackage rec {
pname = "pylast";
version = "5.3.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/9b/57/e25206d012afe3fe5e3336a875babb5413b81c00706411a645a38185ad3b/pylast-5.3.0-py3-none-any.whl";
sha256 = "023ki92jgc9mk2k9c4li48zf23yz2wn022m1rsjj9bsvn3f7ri2c";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."httpx"
];
};
"python-dateutil" = super.buildPythonPackage rec {
pname = "python-dateutil";
version = "2.9.0.post0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl";
sha256 = "09q48zvsbagfa3w87zkd2c5xl54wmb9rf2hlr20j4a5fzxxvrcm8";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."six"
];
};
"python3-discogs-client" = super.buildPythonPackage rec {
pname = "python3-discogs-client";
version = "2.7.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/02/eb/b3d321440728addb72296e75ae2bfddd8fd3518b5ce5bd54a1ad821227a2/python3_discogs_client-2.7.1-py3-none-any.whl";
sha256 = "0i3lfdn2ncxfvmmldg31gmdv7vdcicjl890mihncxa48yb9g7daz";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."oauthlib"
self."python-dateutil"
self."requests"
];
};
"requests" = super.buildPythonPackage rec {
pname = "requests";
version = "2.32.3";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl";
sha256 = "1inwsrhx0m16q0wa1z6dfm8i8xkrfns73xm25arcwwy70gz1qxkh";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."certifi"
self."charset-normalizer"
self."idna"
self."urllib3"
];
};
"six" = super.buildPythonPackage rec {
pname = "six";
version = "1.17.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl";
sha256 = "0x1jdic712dylbnyiqdj4xyxrlx0gaacynmbmkfiym4hxn8z68a7";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"sniffio" = super.buildPythonPackage rec {
pname = "sniffio";
version = "1.3.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl";
sha256 = "18i50l85yppn9w1ily8m342yd577h0bg8y24hkfzvq7is4ca8v9g";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"soupsieve" = super.buildPythonPackage rec {
pname = "soupsieve";
version = "2.6";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl";
sha256 = "1jfc0b39kwnh4n30458mr8gmh50mx3k5zxghm6sy9djgdvq4yb77";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"typing-extensions" = super.buildPythonPackage rec {
pname = "typing-extensions";
version = "4.12.2";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl";
sha256 = "03bhjivpvdhn4c3x0963z89hv7b5vxr415akd1fgiwz0a41wmr84";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"urllib3" = super.buildPythonPackage rec {
pname = "urllib3";
version = "2.3.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl";
sha256 = "1pz380a93mhdrzx5003inw5pm5n0fh1xazcbnjxzsyw6d79rmvhw";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
}
@@ -0,0 +1,573 @@
# Generated by pip2nix 0.8.0.dev1
# See https://github.com/nix-community/pip2nix
{
pkgs,
fetchurl,
fetchgit,
fetchhg,
}:
self: super: {
# "PyYAML" = super.buildPythonPackage rec {
# pname = "PyYAML";
# version = "6.0.2";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz";
# sha256 = "0gmwggzm0j0iprx074g5hah91y2f68sfhhldq0f8crddj7ndk16m";
# };
# format = "setuptools";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [ ];
# };
# "Unidecode" = super.buildPythonPackage rec {
# pname = "Unidecode";
# version = "1.3.8";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/84/b7/6ec57841fb67c98f52fc8e4a2d96df60059637cba077edc569a302a8ffc7/Unidecode-1.3.8-py3-none-any.whl";
# sha256 = "0fgxj6h9lkjq4saynkjqf2wb9plsr5wyg3xxld482vv9wqfacc6i";
# };
# format = "wheel";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [ ];
# };
# "anyio" = super.buildPythonPackage rec {
# pname = "anyio";
# version = "4.7.0";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/a0/7a/4daaf3b6c08ad7ceffea4634ec206faeff697526421c20f07628c7372156/anyio-4.7.0-py3-none-any.whl";
# sha256 = "0lp30wfn1hs2wvaz3wadzwwcb3l9ii4b1k78yzzscaxl79rc6q7a";
# };
# format = "wheel";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [
# self."exceptiongroup"
# self."idna"
# self."sniffio"
# self."typing-extensions"
# ];
# };
# "beautifulsoup4" = super.buildPythonPackage rec {
# pname = "beautifulsoup4";
# version = "4.12.3";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl";
# sha256 = "1vc2w3wvnhbp2q287ilzjsiqyvd0vc5s52ysalz32481yk4ph25q";
# };
# format = "wheel";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [
# self."soupsieve"
# ];
# };
"beetcamp" = super.buildPythonPackage rec {
pname = "beetcamp";
version = "0.21.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/6c/d3/94cad1ba1e65a9445655968a6dcdd528cb1352e2389f0921a9f8c0ccd4a0/beetcamp-0.21.0-py3-none-any.whl";
sha256 = "08mxqmckg2fx9rkm5a1n9zs2sjccjj75vgxac22xjyi3fw1k0wz2";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."beets" # its doesnt matter?
# self."httpx"
# self."packaging"
# self."pycountry"
];
};
"beets" = super.buildPythonPackage rec {
pname = "beets";
version = "2.2.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/f3/44/1c53c2ac111e5526083e58f50a22504ad7c609be1ce660c0339938a42c33/beets-2.2.0-py3-none-any.whl";
sha256 = "076hl1j74cgyh6n1piwprnzb89gihy2vmajm8lzfhy1jjcrfrpbd";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
#self."PyYAML"
#self."Unidecode"
#self."confuse"
#self."jellyfish"
self."mediafile"
self."munkres"
self."musicbrainzngs"
self."platformdirs"
#self."typing-extensions"
# ext
#self."requests" # For spotify, deezer, embedart, fetchart, lyrics
self."python3-discogs-client" # For discogs
#self."pylast" # For lastgenre
#self."beetcamp" # Another
];
};
# "certifi" = super.buildPythonPackage rec {
# pname = "certifi";
# version = "2024.12.14";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl";
# sha256 = "0mpccx4yscnk6rhl12fk8wpgwrpq62m4w23k27y4wip9bfjgfx8j";
# };
# format = "wheel";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [ ];
# };
"charset-normalizer" = super.buildPythonPackage rec {
pname = "charset-normalizer";
version = "3.4.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz";
sha256 = "18sfsqpdmxbddr3g3yg0sln10ghq4sp0vl2xb1b5p9v8rlc1y9a4";
};
format = "setuptools";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"colorama" = super.buildPythonPackage rec {
pname = "colorama";
version = "0.4.6";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl";
sha256 = "1ijz53xpmxds2qf02l9yf0rnp7bznwh3ci4xkw8wmh5cyn8rj7ag";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
# "confuse" = super.buildPythonPackage rec {
# pname = "confuse";
# version = "2.0.1";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/32/1f/cf496479814d41fc252004482deeb90b740b4a6a391a3355c0b11d7e0abf/confuse-2.0.1-py3-none-any.whl";
# sha256 = "0amxm8vnxcayh7inahvj3fzj33n8gs8lvcfaicqrpjz2f2y5p7lv";
# };
# format = "wheel";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [
# self."PyYAML"
# ];
# };
"exceptiongroup" = super.buildPythonPackage rec {
pname = "exceptiongroup";
version = "1.3.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl";
sha256 = "044alxyhkfdlr5z3xlpnf5lv78310bnsgnkdmm669l0k1ip1w4ad";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."typing-extensions"
];
};
"filetype" = super.buildPythonPackage rec {
pname = "filetype";
version = "1.2.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/18/79/1b8fa1bb3568781e84c9200f951c735f3f157429f44be0495da55894d620/filetype-1.2.0-py2.py3-none-any.whl";
sha256 = "099d3igvmfcdgg9dcylz8advva5n3qpplsf8gb7l24hqh1l1prvw";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"h11" = super.buildPythonPackage rec {
pname = "h11";
version = "0.14.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl";
sha256 = "0qd7z9p38dwx215048q708vd1sn2abdh1mb3hg66ii2ip324mzp3";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
# "httpcore" = super.buildPythonPackage rec {
# pname = "httpcore";
# version = "1.0.7";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl";
# sha256 = "1p8f8bnrir1d50s6z19jndca98qghgqrr7rx6syxaq627psgizx3";
# };
# format = "wheel";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [
# self."certifi"
# self."h11"
# ];
# };
# "httpx" = super.buildPythonPackage rec {
# pname = "httpx";
# version = "0.28.1";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl";
# sha256 = "1barpaw8as8xb7b2bsmzdmdbq5nqljlq5jhlz3xcgy0hq76gq2fr";
# };
# format = "wheel";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [
# self."anyio"
# self."certifi"
# self."httpcore"
# self."idna"
# ];
# };
"idna" = super.buildPythonPackage rec {
pname = "idna";
version = "3.10";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl";
sha256 = "1lw72a5swas501zvkpd6dsryj5hzjijqxs3526kbp7151md1jvcl";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
# "jellyfish" = super.buildPythonPackage rec { # That is Rust package
# pname = "jellyfish";
# version = "1.1.3";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/5b/3a/f607d7d44ee5cbad51ce8e2966bde112789eeb53633558f500bc4e44c053/jellyfish-1.1.3.tar.gz";
# sha256 = "17wgy021wsp8jj95v638kfk34r9yzbry3q7shnglj5npmgfs22v5";
# };
# format = "setuptools";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [ ];
# };
"langdetect" = super.buildPythonPackage rec {
pname = "langdetect";
version = "1.0.9";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/0e/72/a3add0e4eec4eb9e2569554f7c70f4a3c27712f40e3284d483e88094cc0e/langdetect-1.0.9.tar.gz";
sha256 = "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb";
};
format = "setuptools";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."six"
];
};
"mediafile" = super.buildPythonPackage rec {
pname = "mediafile";
version = "0.13.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/9f/b0/363b4d1443a593398f9d3784f406385f075e8fd0991c35356e73fc37638a/mediafile-0.13.0-py3-none-any.whl";
sha256 = "1jqlwmwpgn0fxkbxrj8y5a4wr3ikwgs2rsc678hbaw861qyii3fd";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."filetype"
self."mutagen"
];
};
"munkres" = super.buildPythonPackage rec {
pname = "munkres";
version = "1.1.4";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/90/ab/0301c945a704218bc9435f0e3c88884f6b19ef234d8899fb47ce1ccfd0c9/munkres-1.1.4-py2.py3-none-any.whl";
sha256 = "0apdpkbhg4wq5pis5d2mkqg46ikwix5nwcm2mrjxi04499yqc0bb";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"musicbrainzngs" = super.buildPythonPackage rec {
pname = "musicbrainzngs";
version = "0.7.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/6d/fd/cef7b2580436910ccd2f8d3deec0f3c81743e15c0eb5b97dde3fbf33c0c8/musicbrainzngs-0.7.1-py2.py3-none-any.whl";
sha256 = "040s1q4ia6gl2bjjxrjs384980854s9za28b55r0lk0hfpwshhg8";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"mutagen" = super.buildPythonPackage rec {
pname = "mutagen";
version = "1.47.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/b0/7a/620f945b96be1f6ee357d211d5bf74ab1b7fe72a9f1525aafbfe3aee6875/mutagen-1.47.0-py3-none-any.whl";
sha256 = "06d7miq4z6m7j8rx2czkmqhgbjb2bwjagfz5v0wraylhqm86zngd";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"oauthlib" = super.buildPythonPackage rec {
pname = "oauthlib";
version = "3.2.2";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl";
sha256 = "1jpvcxq0xr3z50fdg828in1icgz8cfcy3sc04r85vqhkmjdg4fc1";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"packaging" = super.buildPythonPackage rec {
pname = "packaging";
version = "24.2";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl";
sha256 = "0nd7a421brjgd4prm8fbs8a6bcv4n1yplgxalgs02p16rnyb3aq9";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"pillow" = super.buildPythonPackage rec {
pname = "pillow";
version = "11.0.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/a5/26/0d95c04c868f6bdb0c447e3ee2de5564411845e36a858cfd63766bc7b563/pillow-11.0.0.tar.gz";
sha256 = "0fbpcwgiac19ap0h1qa1imsqhq6vxv8kg67zkgm3y05c4jpwpfkj";
};
format = "setuptools";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"platformdirs" = super.buildPythonPackage rec {
pname = "platformdirs";
version = "4.3.6";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl";
sha256 = "1yy39iay8fdb3c1r4gm011lla1sk1mc9fsw300wi1f4a83hpbrbk";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"pycountry" = super.buildPythonPackage rec {
pname = "pycountry";
version = "24.6.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/b1/ec/1fb891d8a2660716aadb2143235481d15ed1cbfe3ad669194690b0604492/pycountry-24.6.1-py3-none-any.whl";
sha256 = "0vz0dhfkbjld5jagh9wafwy27k5d83bmd5fkxy74y8fp3hwzp97i";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
# "pylast" = super.buildPythonPackage rec {
# pname = "pylast";
# version = "5.3.0";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/9b/57/e25206d012afe3fe5e3336a875babb5413b81c00706411a645a38185ad3b/pylast-5.3.0-py3-none-any.whl";
# sha256 = "023ki92jgc9mk2k9c4li48zf23yz2wn022m1rsjj9bsvn3f7ri2c";
# };
# format = "wheel";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [
# self."httpx"
# ];
# };
"python-dateutil" = super.buildPythonPackage rec {
pname = "python-dateutil";
version = "2.9.0.post0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl";
sha256 = "09q48zvsbagfa3w87zkd2c5xl54wmb9rf2hlr20j4a5fzxxvrcm8";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."six"
];
};
"python3-discogs-client" = super.buildPythonPackage rec {
pname = "python3-discogs-client";
version = "2.7.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/02/eb/b3d321440728addb72296e75ae2bfddd8fd3518b5ce5bd54a1ad821227a2/python3_discogs_client-2.7.1-py3-none-any.whl";
sha256 = "0i3lfdn2ncxfvmmldg31gmdv7vdcicjl890mihncxa48yb9g7daz";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [
self."oauthlib"
self."python-dateutil"
#self."requests"
];
};
# "requests" = super.buildPythonPackage rec {
# pname = "requests";
# version = "2.32.3";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl";
# sha256 = "1inwsrhx0m16q0wa1z6dfm8i8xkrfns73xm25arcwwy70gz1qxkh";
# };
# format = "wheel";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [
# self."certifi"
# self."charset-normalizer"
# self."idna"
# self."urllib3"
# ];
# };
"six" = super.buildPythonPackage rec {
pname = "six";
version = "1.17.0";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl";
sha256 = "0x1jdic712dylbnyiqdj4xyxrlx0gaacynmbmkfiym4hxn8z68a7";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"sniffio" = super.buildPythonPackage rec {
pname = "sniffio";
version = "1.3.1";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl";
sha256 = "18i50l85yppn9w1ily8m342yd577h0bg8y24hkfzvq7is4ca8v9g";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"soupsieve" = super.buildPythonPackage rec {
pname = "soupsieve";
version = "2.6";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl";
sha256 = "1jfc0b39kwnh4n30458mr8gmh50mx3k5zxghm6sy9djgdvq4yb77";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
"typing-extensions" = super.buildPythonPackage rec {
pname = "typing-extensions";
version = "4.12.2";
src = fetchurl {
url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl";
sha256 = "03bhjivpvdhn4c3x0963z89hv7b5vxr415akd1fgiwz0a41wmr84";
};
format = "wheel";
doCheck = false;
buildInputs = [ ];
checkInputs = [ ];
nativeBuildInputs = [ ];
propagatedBuildInputs = [ ];
};
# "urllib3" = super.buildPythonPackage rec {
# pname = "urllib3";
# version = "2.3.0";
# src = fetchurl {
# url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl";
# sha256 = "1pz380a93mhdrzx5003inw5pm5n0fh1xazcbnjxzsyw6d79rmvhw";
# };
# format = "wheel";
# doCheck = false;
# buildInputs = [ ];
# checkInputs = [ ];
# nativeBuildInputs = [ ];
# propagatedBuildInputs = [ ];
# };
}
+21
View File
@@ -0,0 +1,21 @@
{ inputs, ... }@flakeContext:
{
config,
lib,
pkgs,
...
}:
{
environment = {
systemPackages = with pkgs; [
# yabridge
wineWowPackages.yabridge
yabridge
yabridgectl
# JACK Control
qjackctl
];
};
}
+52
View File
@@ -0,0 +1,52 @@
{ inputs, ... }@flakeContext:
{
config,
lib,
pkgs,
...
}:
{
boot = {
kernelModules = [
"kvm-amd"
"vfio"
"vfio-pci"
"vfio_iommu_type1"
"vfio_virqfd"
];
kernelParams = [
"amd_iommu=on"
"iommu=pt"
"kvm.ignore_msrs=1"
];
};
services = {
spice-vdagentd.enable = true;
};
virtualisation = {
libvirtd = {
enable = true;
onBoot = "ignore";
onShutdown = "shutdown";
qemu = {
swtpm.enable = true;
ovmf.enable = true;
ovmf.packages = [ pkgs.OVMFFull.fd ];
};
};
spiceUSBRedirection.enable = true;
};
environment = {
systemPackages = with pkgs; [
spice
#spice-gtk
#spice-protocol
virt-manager
virt-viewer
virtiofsd
win-spice
virtio-win
#looking-glass-client # pci-passthrough
];
};
}
+24
View File
@@ -0,0 +1,24 @@
{
config,
lib,
pkgs,
xlib,
inputs,
...
}:
# let
# work = import inputs.nixpkgs-master { system = "x86_64-linux"; };
# in
{
environment.systemPackages = [
pkgs.openai-whisper
# (work.openai-whisper.override {
# torch = pkgs.python313Packages.torch-bin; # Используй бинарный torch с ROCm, чтобы обойти сборочную хуйню
# })
];
# systemd.tmpfiles.rules = ["L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"];
# hardware.graphics.extraPackages = with pkgs.rocmPackages; [ clr clr.icd ];
#nixpkgs.config.rocmSupport = true;
}
+20
View File
@@ -0,0 +1,20 @@
{ inputs, ... }@flakeContext:
{
config,
lib,
pkgs,
...
}:
{
environment = {
systemPackages = with pkgs; [
#wineWowPackages.waylandFull
wineWowPackages.stagingFull
#wineWowPackages.fonts
dxvk
];
sessionVariables = {
WINEARCH = "win64";
};
};
}
+123
View File
@@ -0,0 +1,123 @@
{
config,
xlib,
lib,
pkgs,
...
}:
{
#imports = [
# ./others
#];
xlib.device.username = "oqyude";
users = {
mutableUsers = false;
users = {
"${xlib.device.username}" = {
name = "${xlib.device.username}";
isNormalUser = true;
group = "users";
description = "Jor Oqyude";
hashedPasswordFile = config.sops.secrets.hashed_password.path; # hashed_password
homeMode = "700";
home = "/home/${xlib.device.username}";
extraGroups = [
"audio"
"disk"
"gamemode"
"networkmanager"
"pipewire"
"wheel"
"libvirtd"
"qemu-libvirtd"
];
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKduJia+unaQQdN6X5syaHvnpIutO+yZwvfiCP4qKQ/P"
];
};
};
};
#systemd.tmpfiles.rules = [
# "z /home/shared 2775 root users -"
#];
sops = {
age = {
sshKeyPaths = [
"/etc/ssh/id_ed25519"
];
};
defaultSopsFile = ../secrets/default.yaml;
secrets = {
hashed_password = {
neededForUsers = true;
key = "hashed_password";
format = "yaml";
};
age_key_private = {
format = "yaml";
key = "age_key_private";
path = "/home/${xlib.device.username}/.config/sops/age/keys.txt";
owner = config.users.users."${xlib.device.username}".name;
group = config.users.users."${xlib.device.username}".group;
mode = "0600";
};
ssh_key_private = {
format = "yaml";
key = "ssh_key_private";
path = "/home/${xlib.device.username}/.ssh/id_ed25519";
owner = config.users.users."${xlib.device.username}".name;
group = config.users.users."${xlib.device.username}".group;
mode = "0600";
};
ssh_key_public = {
format = "yaml";
key = "ssh_key_public";
path = "/home/${xlib.device.username}/.ssh/id_ed25519.pub";
owner = config.users.users."${xlib.device.username}".name;
group = config.users.users."${xlib.device.username}".group;
mode = "0655";
};
ssh_key_private_root = {
format = "yaml";
key = "ssh_key_private";
path = "/root/.ssh/id_ed25519";
owner = "root";
group = "root";
mode = "0600";
};
ssh_key_public_root = {
format = "yaml";
key = "ssh_key_public";
path = "/root/.ssh/id_ed25519";
owner = "root";
group = "root";
mode = "0655";
};
ssh_key_public_host = {
format = "yaml";
key = "ssh_key_public";
path = "/etc/ssh/id_ed25519.pub";
mode = "0655";
};
};
};
# systemd.services.nixos-auto-rebuild-sops = {
# description = "Auto rebuild NixOS at boot";
# wantedBy = [ "multi-user.target" ];
# after = [ "network-online.target" ];
# serviceConfig = {
# Type = "oneshot";
# User = "${xlib.device.username}";
# Group = "users";
# WorkingDirectory = "/etc/nixos";
# ExecStart = [ "/run/wrappers/bin/sudo ${pkgs.nixos-rebuild}/bin/nixos-rebuild switch" ];
# };
# };
# fileSystems."/etc/ssh".neededForBoot = true;
}
+9
View File
@@ -0,0 +1,9 @@
{
lib,
...
}:
{
imports = [
../vds
];
}
+12
View File
@@ -0,0 +1,12 @@
{
lib,
...
}:
{
imports = [
../containers/3x-ui.nix
./nginx.nix
./xray.nix
# ./netbird.nix
];
}
+40
View File
@@ -0,0 +1,40 @@
{
config,
pkgs,
...
}:
{
services.netbird.server = {
enable = false;
enableNginx = true;
domain = "netbird.zeroq.ru";
dashboard = {
enable = false;
domain = "netbird.zeroq.ru";
settings = {
#AUTH_AUTHORITY = "nbp_ufe0v5mbb5H1lQWL8eJfuzJ5ItPmlM46Mik0";
};
};
management = {
enable = false;
domain = "netbird.zeroq.ru";
};
};
# networking.firewall = {
# allowedTCPPorts = [
# 80
# 443
# 33073
# 10000
# 33080
# ];
# allowedUDPPorts = [ 3478 ];
# allowedUDPPortRanges = [
# {
# from = 49152;
# to = 65535;
# }
# ];
# };
}
+214
View File
@@ -0,0 +1,214 @@
{
config,
inputs,
pkgs,
...
}:
let
server = "100.64.0.0";
in
{
environment.etc."nginx/pubray".text = inputs.zeroq-credentials.services.xray.auth;
users.users.nginx.extraGroups = [ "acme" ];
services = {
nginx = {
enable = true;
recommendedGzipSettings = true;
recommendedOptimisation = true;
recommendedProxySettings = true;
recommendedTlsSettings = true;
appendHttpConfig = inputs.zeroq-credentials.services.xray.maps;
virtualHosts = {
# "pubray.zeroq.ru" = {
# enableACME = true;
# forceSSL = true;
# root = "${inputs.zeroq-credentials.services.xray.subs}";
# locations."/" = {
# extraConfig = ''
# auth_basic "Restricted";
# auth_basic_user_file /etc/nginx/pubray;
# if ($subfile = "") { return 403; }
# rewrite ^/$ $subfile break;
# '';
# };
# };
"x.zeroq.ru" = {
forceSSL = true;
enableACME = true;
locations = {
"/" = {
proxyPass = "http://localhost:2049";
proxyWebsockets = true;
};
"/subs/" = {
proxyPass = "http://localhost:2096";
proxyWebsockets = true;
};
};
};
"kuma.zeroq.ru" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:4001";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 5G;
'';
};
"health.zeroq.ru" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:19999";
proxyWebsockets = true;
};
};
"agent.zeroq.ru" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:3000";
proxyWebsockets = true;
};
};
# "node-red.zeroq.ru" = {
# forceSSL = true;
# enableACME = true;
# kTLS = true;
# locations."/" = {
# proxyPass = "http://${server}:1880";
# proxyWebsockets = true;
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
"zeroq.ru" = {
forceSSL = true;
enableACME = true;
root = pkgs.writeTextDir "index.html" ''
<!doctype html>
<html>
<body>
<pre>What are you doing here?</pre>
</body>
</html>
'';
locations = {
"/guest/" = {
proxyPass = "http://${server}:80";
proxyWebsockets = true;
};
# "/.well-known/discord" = {
# extraConfig = ''
# default_type text/plain;
# return 200 "dh=c2d103553a4cfdaa1b7952a87a7d8120a1e167cc";
# '';
# };
};
};
"flux.zeroq.ru" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:6061";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 5G;
'';
};
"office.zeroq.ru" = {
enableACME = true;
forceSSL = true;
locations = {
"/" = {
proxyPass = "http://${server}:9980"; # API и coauthoring
proxyWebsockets = true;
};
};
extraConfig = ''
client_max_body_size 5G;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
''; # absolute_redirect off;
};
"immich.zeroq.ru" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:2283";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 5G;
'';
};
"nextcloud.zeroq.ru" = {
forceSSL = true;
enableACME = true;
locations = {
"/" = {
proxyPass = "http://${server}:10000";
proxyWebsockets = true;
};
"/whiteboard" = {
proxyPass = "http://${server}:3002";
proxyWebsockets = true;
};
};
extraConfig = ''
client_max_body_size 5G;
'';
};
"calibre.zeroq.ru" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:8083";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 5G;
'';
};
# "pdf.zeroq.ru" = {
# forceSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://${server}:6060";
# proxyWebsockets = true;
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
# "ai.zeroq.ru" = {
# forceSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://${server}:11112";
# proxyWebsockets = true;
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
};
};
};
security.acme = {
acceptTerms = true;
defaults = {
email = "go.bin043120@gmail.com";
};
};
networking.firewall.allowedTCPPorts = [
80
443
];
}
+44
View File
@@ -0,0 +1,44 @@
{
config,
inputs,
pkgs,
...
}:
{
services.xray = {
enable = false;
settings = inputs.zeroq-credentials.services.xray.config;
};
# networking.firewall = {
# allowedTCPPorts = [
# 8443
# 9443
# 13380
# ];
# allowedUDPPorts = [
# 8443
# 9443
# 13380
# ];
# };
environment.systemPackages = [ pkgs.xray ];
# sops.secrets = {
# xray_uuid = {
# key = "uuid";
# mode = "0444";
# format = "yaml";
# sopsFile = ./secrets/xray.yaml;
# path = "/etc/xray/uuid";
# };
# xray_private-key = {
# path = "/etc/xray/private-key";
# key = "private-key";
# mode = "0444";
# format = "yaml";
# sopsFile = ./secrets/xray.yaml;
# };
# };
}
+118
View File
@@ -0,0 +1,118 @@
# Auto-generated using compose2nix v0.3.3-pre.
{
pkgs,
lib,
config,
...
}:
{
# Runtime
virtualisation.podman = {
enable = true;
autoPrune = {
enable = true;
flags = [ "--all" ];
};
dockerCompat = true;
};
# Enable container name DNS for all Podman networks.
networking.firewall.interfaces =
let
matchAll = if !config.networking.nftables.enable then "podman+" else "podman*";
in
{
"${matchAll}".allowedUDPPorts = [ 53 ];
};
networking.firewall = {
allowedUDPPortRanges = [
{
from = 14380;
to = 15380;
}
];
allowedTCPPortRanges = [
{
from = 14380;
to = 15380;
}
];
allowedTCPPorts = [
8443
9443
13380
];
allowedUDPPorts = [
8443
9443
13380
];
};
virtualisation.oci-containers.backend = "podman";
# Containers
virtualisation.oci-containers.containers."3xui_app" = {
image = "ghcr.io/mhsanaei/3x-ui:latest";
environment = {
"XRAY_VMESS_AEAD_FORCED" = "false";
"XUI_ENABLE_FAIL2BAN" = "true";
"TZ" = "Europe/Moscow";
};
volumes = [
"/mnt/containers/3x-ui/cert/:/root/cert:rw"
"/mnt/containers/3x-ui/db/:/etc/x-ui:rw"
];
log-driver = "journald";
extraOptions = [
"--network=host"
];
};
systemd.services."podman-3xui_app" = {
serviceConfig = {
Restart = lib.mkOverride 90 "always";
};
partOf = [
"podman-compose-3x-ui-root.target"
];
wantedBy = [
"podman-compose-3x-ui-root.target"
];
};
# Builds
systemd.services."podman-build-3xui_app" = {
path = [
pkgs.podman
pkgs.git
];
serviceConfig = {
Type = "oneshot";
TimeoutSec = 300;
};
script = ''
cd /mnt/containers/3x-ui
podman build -t compose2nix/3xui_app -f ./Dockerfile .
'';
};
# Root service
# When started, this will automatically create all resources and start
# the containers. When stopped, this will teardown all resources.
systemd.targets."podman-compose-3x-ui-root" = {
unitConfig = {
Description = "Root target generated by compose2nix.";
};
wantedBy = [ "multi-user.target" ];
};
# Folders
systemd.tmpfiles.rules = [
"d /mnt 0755 root root -"
"d /mnt/containers 0755 root root -"
"d /mnt/containers/3x-ui 0755 root root -"
"d /mnt/containers/3x-ui/cert 0755 root root -"
"d /mnt/containers/3x-ui/db 0755 root root -"
];
}
+16
View File
@@ -0,0 +1,16 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
# ./3x-ui.nix
];
environment.systemPackages = with pkgs; [
compose2nix
podman-tui
];
}
+15
View File
@@ -0,0 +1,15 @@
{
lib,
pkgs,
...
}:
{
imports = [
../software/aichat.nix
../software/beets
../software/whisper.nix
./containers
#../server/open-webui.nix
#../services/tts.nix
];
}