Compare commits

..
1 Commits
Author SHA1 Message Date
oqyude 3120ceaf40 n8n added 2026-06-14 18:31:49 +03:00
61 changed files with 2442 additions and 1968 deletions
-1
View File
@@ -1,2 +1 @@
.vscode .vscode
.omo
-6
View File
@@ -9,10 +9,4 @@
sapphira = import ./server.nix flakeContext; # sapphira sapphira = import ./server.nix flakeContext; # sapphira
wsl = import ./wsl.nix flakeContext; # wsl wsl = import ./wsl.nix flakeContext; # wsl
}; };
nixOnDroidConfigurations = {
epral = import ./mobile.nix flakeContext; # epral (Android via nix-on-droid)
# Alias so a plain `nix-on-droid switch` from a local clone
# (~/.config/nix-on-droid) picks up the device config without `#epral`.
default = import ./mobile.nix flakeContext;
};
} }
-1
View File
@@ -28,7 +28,6 @@
kernel = { kernel = {
sysctl = { sysctl = {
"fs.inotify.max_user_watches" = "204800"; "fs.inotify.max_user_watches" = "204800";
"net.ipv4.ip_forward" = 1;
}; };
}; };
kernelModules = [ kernelModules = [
+3
View File
@@ -68,6 +68,7 @@ let
boot = { boot = {
kernelPackages = lib.mkDefault pkgs.linuxPackages_xanmod_stable; kernelPackages = lib.mkDefault pkgs.linuxPackages_xanmod_stable;
#kernelParams = [ "usbcore.autosuspend=-1" ];
loader = { loader = {
systemd-boot.enable = lib.mkDefault true; systemd-boot.enable = lib.mkDefault true;
efi.canTouchEfiVariables = lib.mkDefault true; efi.canTouchEfiVariables = lib.mkDefault true;
@@ -78,6 +79,8 @@ let
bluetooth.enable = true; bluetooth.enable = true;
}; };
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
networking = { networking = {
hostName = "${xlib.device.hostname}"; hostName = "${xlib.device.hostname}";
networkmanager.enable = true; networkmanager.enable = true;
-123
View File
@@ -1,123 +0,0 @@
{
inputs,
...
}@flakeContext:
let
# Host: epral (Android device via nix-on-droid, aarch64-linux)
# Integrates with the base defaultModule (imports.self.nixosModules.default),
# which is trimmed for the "termux" device type: NixOS-only modules
# (essentials, users.nix, home-manager, sops-nix, disko, grub2-themes)
# and nixpkgs.overlays are skipped so it evaluates under nix-on-droid's
# module system (class = "nixOnDroid").
nixOnDroidModule =
{
lib,
pkgs,
xlib,
...
}:
{
imports = [
inputs.self.nixosModules.strict
];
xlib.device = {
type = "termux";
hostname = "epral";
};
# Login shell. nix-on-droid writes /etc/passwd from user.shell on every
# activation, so `chsh` is useless here — set it in nix instead.
# (default is bashInteractive)
user.shell = "${pkgs.zsh}/bin/zsh";
# SSH user (matches `User oqyude` in the client's ~/.ssh/config).
# Default is "nix-on-droid"; home stays at the read-only
# /data/data/com.termux.nix/files/home either way.
user.userName = "oqyude";
# Minimal termux settings (nix-on-droid options only:
# environment.*, nix.*, time.*, user.*, system.*, android-integration.*)
# user.userName defaults to "nix-on-droid"; set it to override.
# user.home is read-only: /data/data/com.termux.nix/files/home
# Simply install just the packages
environment.packages = with pkgs; [
# User-facing stuff that you really really want to have
vim # or some other editor, e.g. nano or neovim
nano
# Some common stuff that people expect to have
bzip2
diffutils
findutils
git
gnugrep
gnupg
gnused
gnutar
gzip
hostname
man
ncurses
openssh
procps
psmisc # provides killall (attr `killall` was removed from nixpkgs)
treefmt
tzdata
unzip
util-linux # renamed from utillinux
zip
];
# Backup etc files instead of failing to activate generation if a file already exists in /etc
environment.etcBackupExtension = ".bak";
# Shared userspace home-manager config (same cozy shell as on NixOS hosts).
# nix-on-droid forces home.username / home.homeDirectory from user.*,
# so the strict module must not set them.
# xlib is injected via home-manager.extraSpecialArgs (the HM submodule
# does not inherit the nix-on-droid module args).
home-manager = {
useGlobalPkgs = true;
backupFileExtension = "hm-bak";
extraSpecialArgs = {
inherit xlib;
};
config = { ... }: {
imports = [
../home/termux.nix
];
home.stateVersion = "24.05";
};
};
# Read the changelog before changing this value
system.stateVersion = "24.05";
# Set up nix for flakes
nix.extraOptions = ''
experimental-features = nix-command flakes
'';
# Set your time zone
time.timeZone = "Europe/Moscow";
android-integration.termux-setup-storage.enable = true;
# Provides `am` (termux-am) — required by termux-api's broadcast backend.
android-integration.am.enable = true;
};
in
inputs.nix-on-droid.lib.nixOnDroidConfiguration {
pkgs = import inputs.nixpkgs {
system = "aarch64-linux";
};
modules = [
nixOnDroidModule
];
extraSpecialArgs = {
deviceType = "termux";
};
}
+3 -4
View File
@@ -83,7 +83,10 @@ let
]; ];
services = { services = {
power-profiles-daemon.enable = lib.mkForce false;
earlyoom.enable = true; earlyoom.enable = true;
auto-cpufreq.enable = false;
throttled.enable = true;
journald = { journald = {
extraConfig = '' extraConfig = ''
SystemMaxUse=512M SystemMaxUse=512M
@@ -110,10 +113,6 @@ let
hostName = "${xlib.device.hostname}"; hostName = "${xlib.device.hostname}";
networkmanager.enable = true; networkmanager.enable = true;
firewall.enable = false; firewall.enable = false;
# nameservers = [
# "192.168.1.1"
# "127.0.0.1"
# ];
}; };
system = { system = {
Generated
+27 -223
View File
@@ -13,11 +13,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1785892481, "lastModified": 1781023725,
"narHash": "sha256-1JTy9/LyITSBP1a4WZ9tmOv2yDh9OTbA3YUJbQHiMYc=", "narHash": "sha256-Gt+qFANcrDRjl3xzidLYrAUQCd3808iuAsLwZbYYAEU=",
"owner": "serokell", "owner": "serokell",
"repo": "deploy-rs", "repo": "deploy-rs",
"rev": "f6f2359a6cb7e3c51ea673bcb39933ac2622350d", "rev": "2ce9051767ee4d1a3c43b52ba327431783bfd463",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -88,11 +88,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1786031233, "lastModified": 1781189114,
"narHash": "sha256-TIDlLTLI1/pB7IqgjzcKQjpODQsZE2oII4XGG9B6KjI=", "narHash": "sha256-5inaamLgUMWy+MOBE9ChF9QAF1o/74LFuHkI0W/9rqc=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "7834e82588860aaf780cec1366524456a70898d7", "rev": "486595d2cf49cfcd649b58a284fa11ac0e34da22",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -101,70 +101,16 @@
"type": "github" "type": "github"
} }
}, },
"nix-formatter-pack": {
"inputs": {
"nixpkgs": [
"nix-on-droid",
"nixpkgs"
],
"nmd": [
"nix-on-droid",
"nmd"
],
"nmt": "nmt"
},
"locked": {
"lastModified": 1705252799,
"narHash": "sha256-HgSTREh7VoXjGgNDwKQUYcYo13rPkltW7IitHrTPA5c=",
"owner": "Gerschtli",
"repo": "nix-formatter-pack",
"rev": "2de39dedd79aab14c01b9e2934842051a160ffa5",
"type": "github"
},
"original": {
"owner": "Gerschtli",
"repo": "nix-formatter-pack",
"type": "github"
}
},
"nix-on-droid": {
"inputs": {
"home-manager": [
"home-manager"
],
"nix-formatter-pack": "nix-formatter-pack",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-docs": "nixpkgs-docs",
"nixpkgs-for-bootstrap": "nixpkgs-for-bootstrap",
"nmd": "nmd"
},
"locked": {
"lastModified": 1772387862,
"narHash": "sha256-o7q9flWMCsFW2mkz8TQhvPUcwFczO7VX9I6U2u2vN4o=",
"owner": "nix-community",
"repo": "nix-on-droid",
"rev": "67b105336cb06b764366bfe241afa2352de6a926",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "testing",
"repo": "nix-on-droid",
"type": "github"
}
},
"nixos-hardware": { "nixos-hardware": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1785232496, "lastModified": 1781168557,
"narHash": "sha256-65EQYIRRpTdpH8lUiB6Mvo5uBkG60aBIzAJuALfx+O0=", "narHash": "sha256-LOnLQ2tpYF9gqIDDr3+j3DbpJJr/QCH6zPRT2GzEUOE=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "2e790b0a6be8ec2b76174ac0931b8ff11919ec98", "rev": "6358ff76821101c178e3ab4919a62799bfe3652e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -184,11 +130,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1784642409, "lastModified": 1781182279,
"narHash": "sha256-hcbDqFuySAJawljt5r0sKBCJKYnbtGD0T/ZIozH1Dq0=", "narHash": "sha256-V5EQQbDnmdiXGQXrEF1PEL7QYsFqfH8N1E89Z5ONwFk=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NixOS-WSL", "repo": "NixOS-WSL",
"rev": "eaeb18da90024448a60eb1ec7132eafa4003404e", "rev": "5675822ba756e6e56f8f6a5a76e90e0da2ece94d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -243,45 +189,13 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-docs": {
"locked": {
"lastModified": 1705957679,
"narHash": "sha256-Q8LJaVZGJ9wo33wBafvZSzapYsjOaNjP/pOnSiKVGHY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9a333eaa80901efe01df07eade2c16d183761fa3",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "release-23.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-for-bootstrap": {
"locked": {
"lastModified": 1772047000,
"narHash": "sha256-7DaQVv4R97cii/Qdfy4tmDZMB2xxtyIvNGSwXBBhSmo=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1267bb4920d0fc06ea916734c11b0bf004bbe17e",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1267bb4920d0fc06ea916734c11b0bf004bbe17e",
"type": "github"
}
},
"nixpkgs-master": { "nixpkgs-master": {
"locked": { "locked": {
"lastModified": 1786198689, "lastModified": 1781298072,
"narHash": "sha256-XkvYmpRd4cmcrzKS8QplEHPZkDDeKwpalJQwosCd3+Q=", "narHash": "sha256-p7sszdPeM3Gm7LA+NrWlxn5Rp6Qp+TGbt2qC/XBCxgI=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "94ec6671dbe7d4879c2c8103e67425e85bf066d7", "rev": "633f0c001a27731ee16cc504e831a4a9ccf071d6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -291,29 +205,13 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-previous": {
"locked": {
"lastModified": 1767892417,
"narHash": "sha256-dhhvQY67aboBk8b0/u0XB6vwHdgbROZT3fJAjyNh5Ww=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba",
"type": "github"
}
},
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1782847189, "lastModified": 1780952837,
"narHash": "sha256-twXPFqFsrrY5r28Zh7Homgcp2gUMBgQ6WDS98Q/3xFI=", "narHash": "sha256-Fwd1+spDtQ0hDyBwme6ufG3n4mY0UrjjFdYHv+G/Hds=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "b6018f87da91d19d0ab4cf979885689b469cdd41", "rev": "e820eb4a444b46a19b2e03e8dfd2359439ff30fe",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -323,29 +221,13 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-unstable": {
"locked": {
"lastModified": 1785975029,
"narHash": "sha256-X44cn5rzytELc3NNoQsh0aLkjWA/QzPfc6HPQmsG3sU=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "70ce234312134a463ba7728e94da2486a1d237ac",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1785967620, "lastModified": 1781074563,
"narHash": "sha256-IItrdb7Puk05RqOBWZYFC5X6Wl1sJmCfh5MWVHw5iMM=", "narHash": "sha256-md8WlXOlfnIeHeOScMTTHFyf2d6iaTwPl2apR5EQ3P4=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "b7c2ada94fe99c15b0dbcf4d11fd7850b957a436", "rev": "9ae611a455b90cf061d8f332b977e387bda8e1ca",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -355,44 +237,6 @@
"type": "github" "type": "github"
} }
}, },
"nmd": {
"inputs": {
"nixpkgs": [
"nix-on-droid",
"nixpkgs-docs"
],
"scss-reset": "scss-reset"
},
"locked": {
"lastModified": 1705050560,
"narHash": "sha256-x3zzcdvhJpodsmdjqB4t5mkVW22V3wqHLOun0KRBzUI=",
"owner": "~rycee",
"repo": "nmd",
"rev": "66d9334933119c36f91a78d565c152a4fdc8d3d3",
"type": "sourcehut"
},
"original": {
"owner": "~rycee",
"repo": "nmd",
"type": "sourcehut"
}
},
"nmt": {
"flake": false,
"locked": {
"lastModified": 1648075362,
"narHash": "sha256-u36WgzoA84dMVsGXzml4wZ5ckGgfnvS0ryzo/3zn/Pc=",
"owner": "rycee",
"repo": "nmt",
"rev": "d83601002c99b78c89ea80e5e6ba21addcfe12ae",
"type": "gitlab"
},
"original": {
"owner": "rycee",
"repo": "nmt",
"type": "gitlab"
}
},
"plasma-manager": { "plasma-manager": {
"inputs": { "inputs": {
"home-manager": [ "home-manager": [
@@ -403,11 +247,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1785762349, "lastModified": 1775856943,
"narHash": "sha256-jZhZkzAwc7f3exzcTDJWP2WCAchCv0iNC3UF/QsahdQ=", "narHash": "sha256-b7Mp7P+q2Md5AGt4rjHfMcBykzMumFTen10ST++AuTU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "plasma-manager", "repo": "plasma-manager",
"rev": "a19a2a029fa180911bd89c554dca1616e10f4c1d", "rev": "a524a6160e6df89f7673ba293cf7d78b559eb1a5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -416,26 +260,6 @@
"type": "github" "type": "github"
} }
}, },
"proxy-suite": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1783174389,
"narHash": "sha256-aCWC8ngycU7OdJrU2+Je3qf+1a2ykuBvpPhZT/9tXMc=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "f1406619a3884cd5c47992a70b8b35c9c0fcb4c9",
"type": "github"
},
"original": {
"owner": "Mic92",
"repo": "sops-nix",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"deploy-rs": "deploy-rs", "deploy-rs": "deploy-rs",
@@ -443,40 +267,20 @@
"flake-compat": "flake-compat", "flake-compat": "flake-compat",
"grub2-themes": "grub2-themes", "grub2-themes": "grub2-themes",
"home-manager": "home-manager", "home-manager": "home-manager",
"nix-on-droid": "nix-on-droid",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixos-wsl": "nixos-wsl", "nixos-wsl": "nixos-wsl",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_2",
"nixpkgs-beets": "nixpkgs-beets", "nixpkgs-beets": "nixpkgs-beets",
"nixpkgs-calibre": "nixpkgs-calibre", "nixpkgs-calibre": "nixpkgs-calibre",
"nixpkgs-master": "nixpkgs-master", "nixpkgs-master": "nixpkgs-master",
"nixpkgs-previous": "nixpkgs-previous",
"nixpkgs-stable": "nixpkgs-stable", "nixpkgs-stable": "nixpkgs-stable",
"nixpkgs-unstable": "nixpkgs-unstable",
"plasma-manager": "plasma-manager", "plasma-manager": "plasma-manager",
"proxy-suite": "proxy-suite",
"sops-nix": "sops-nix", "sops-nix": "sops-nix",
"utils": "utils", "utils": "utils",
"zapret": "zapret", "zapret": "zapret",
"zeroq-credentials": "zeroq-credentials" "zeroq-credentials": "zeroq-credentials"
} }
}, },
"scss-reset": {
"flake": false,
"locked": {
"lastModified": 1631450058,
"narHash": "sha256-muDlZJPtXDIGevSEWkicPP0HQ6VtucbkMNygpGlBEUM=",
"owner": "andreymatin",
"repo": "scss-reset",
"rev": "0cf50e27a4e95e9bb5b1715eedf9c54dee1a5a91",
"type": "github"
},
"original": {
"owner": "andreymatin",
"repo": "scss-reset",
"type": "github"
}
},
"sops-nix": { "sops-nix": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -484,11 +288,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1783174389, "lastModified": 1780547341,
"narHash": "sha256-aCWC8ngycU7OdJrU2+Je3qf+1a2ykuBvpPhZT/9tXMc=", "narHash": "sha256-Gq8KNx5A7hBB3uGJaj6eQfLDIz5YdLu92gqBcvHvoUo=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "f1406619a3884cd5c47992a70b8b35c9c0fcb4c9", "rev": "9ed65852b6257fbeae4355bc24ecfea307ca759a",
"type": "github" "type": "github"
}, },
"original": { "original": {
-13
View File
@@ -7,10 +7,8 @@
# nixpkgs # nixpkgs
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
# nixpkgs-last-unstable.url = "github:NixOS/nixpkgs/6b4955211758ba47fac850c040a27f23b9b4008f"; # nixpkgs-last-unstable.url = "github:NixOS/nixpkgs/6b4955211758ba47fac850c040a27f23b9b4008f";
nixpkgs-calibre.url = "github:NixOS/nixpkgs/566acc07c54dc807f91625bb286cb9b321b5f42a"; nixpkgs-calibre.url = "github:NixOS/nixpkgs/566acc07c54dc807f91625bb286cb9b321b5f42a";
nixpkgs-previous.url = "github:NixOS/nixpkgs/3497aa5c9457a9d88d71fa93a4a8368816fbeeba";
nixpkgs-master.url = "github:NixOS/nixpkgs/master"; nixpkgs-master.url = "github:NixOS/nixpkgs/master";
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.11"; nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.11";
nixpkgs-beets.url = "github:NixOS/nixpkgs/832efc09b4caf6b4569fbf9dc01bec3082a00611"; # 2343bbb58f99267223bc2aac4fc9ea301a155a16 nixpkgs-beets.url = "github:NixOS/nixpkgs/832efc09b4caf6b4569fbf9dc01bec3082a00611"; # 2343bbb58f99267223bc2aac4fc9ea301a155a16
@@ -24,13 +22,6 @@
nixpkgs.follows = "nixpkgs"; nixpkgs.follows = "nixpkgs";
}; };
}; };
nix-on-droid = {
url = "github:nix-community/nix-on-droid/testing"; # testing branch, used on the device
inputs = {
nixpkgs.follows = "nixpkgs";
home-manager.follows = "home-manager";
};
};
deploy-rs = { deploy-rs = {
url = "github:serokell/deploy-rs"; url = "github:serokell/deploy-rs";
inputs = { inputs = {
@@ -66,10 +57,6 @@
home-manager.follows = "home-manager"; home-manager.follows = "home-manager";
}; };
}; };
proxy-suite = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix = { sops-nix = {
url = "github:Mic92/sops-nix"; url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
+12
View File
@@ -1,9 +1,21 @@
{ {
config, config,
pkgs, pkgs,
xlib,
... ...
}: }:
let
streamripPath = "${xlib.dirs.wsl-storage}/streamrip";
in
{ {
# xdg = {
# configFile = {
# "streamrip" = {
# source = config.lib.file.mkOutOfStoreSymlink streamripPath;
# target = "streamrip";
# };
# };
# };
home.packages = [ home.packages = [
pkgs.yt-dlp-light pkgs.yt-dlp-light
]; ];
+27
View File
@@ -8,6 +8,25 @@
programs = { programs = {
mangohud.enable = true; mangohud.enable = true;
keepassxc.enable = true; keepassxc.enable = true;
zed-editor = {
enable = false;
extensions = [
"nix"
];
userSettings = {
"telemetry" = {
"diagnostics" = false;
"metrics" = false;
};
"ui_font_size" = 20;
"buffer_font_size" = 26;
"theme" = {
"mode" = "system";
"light" = "Ayu Light";
"dark" = "Ayu Dark";
};
};
};
}; };
services = { services = {
kdeconnect.enable = true; kdeconnect.enable = true;
@@ -15,6 +34,12 @@
}; };
home = { home = {
packages = with pkgs; [ packages = with pkgs; [
# Surfing
# (brave.override {
# commandLineArgs = [
# "--password-store=basic" # on purpose to make it break "--password-store=gnome-libsecret"
# ];
# })
brave brave
v2rayn v2rayn
@@ -23,6 +48,8 @@
# amdgpu_top # amdgpu_top
vscodium vscodium
ayugram-desktop ayugram-desktop
# vesktop
# discord
gramps gramps
kdePackages.filelight kdePackages.filelight
localsend localsend
-283
View File
@@ -1,283 +0,0 @@
{
config,
lib,
pkgs,
xlib,
...
}:
# Shared "strict" home-manager module.
# Works in BOTH contexts:
# - NixOS hosts (via home-manager.sharedModules or homeConfigurations)
# - nix-on-droid (via home-manager.config in droid/epral.nix)
# Only home-manager options are used here — no systemd.*, no services.*,
# no users.*, no environment.systemPackages. All paths are parameterized
# through config.home.homeDirectory so /home/oqyude (NixOS) and
# /data/data/com.termux.nix/files/home (termux) both work.
#
# NOTE: intentionally duplicates parts of modules/essentials/{shell,packages}.nix
# (which stay NixOS-only for now). When this module is wired into NixOS hosts
# via sharedModules, deduplicate those files.
{
home = {
packages = with pkgs; [
# Lazy (alias lc)
lazycli
# IDE
fresh-editor # EDITOR
# Base utils
curl
wget
fd
tree
dust
gdu
mc
rsync
jq
unzip
zip
zstd
# Net diagnostic
mtr
dnsutils
# Monitoring
htop
];
sessionVariables = {
TUCKR_HOME = "$HOME/Storage/dotfiles";
EDITOR = "fresh";
};
file = {
".nanorc".text = ''
set nowrap
set tabstospaces
set tabsize 2
'';
# Authorized keys for sshd (see modules/termux/default.nix).
# Declarative for now — the Store/.ssh symlink scheme is postponed.
".ssh/authorized_keys".text = ''
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKduJia+unaQQdN6X5syaHvnpIutO+yZwvfiCP4qKQ/P
'';
};
};
programs = {
# ---- Shell: zsh ----
zsh = {
enable = true;
enableCompletion = true;
syntaxHighlighting.enable = true;
history.size = 10000;
oh-my-zsh = {
enable = true;
theme = "robbyrussell";
};
loginExtra = "clear && fastfetch && cd ~/.config/nix-on-droid";
# .zshenv — sourced by zsh in ALL sessions incl. non-login ssh commands.
# runit from nixpkgs defaults to /var/service as SVDIR, but our tree
# lives at ~/service (symlinked as /etc/service). Export it so that
# `sv status sshd` works without qualifying the path.
envExtra = "export SVDIR=/etc/service";
initContent = ''
beet-p() {
local base="${config.home.homeDirectory}/.config/beets/My"
local rel
rel=$(realpath --relative-to="$base" "$PWD")
beet mod "path:$rel" playlist="$*"
}
beet-ims() {
beet im ./ -S $*
}
beet-path() {
realpath --relative-to="${config.home.homeDirectory}/.config/beets/My" "$1"
}
'';
shellAliases = {
# shell
ff = "clear && fastfetch";
l = "ls -l";
lg = "lazygit";
lc = "lazycli";
gp = "git pull";
ns = "nix-on-droid switch --flake ~/.config/nix-on-droid#${xlib.device.hostname}";
gp-ns = "gp && ns";
gc = "git add . && git commit -m 'dev: автокоммит $(date +'%Y-%m-%d %H:%M:%S')'";
y = "yazi";
nix-shellp = "nix-shell --run $SHELL -p";
beet-path-library = "realpath --relative-to='${config.home.homeDirectory}/.config/beets/My' .";
z-proxy = "export ALL_PROXY=socks5://localhost:10808";
zh-proxy = "export HTTPS_PROXY=http://localhost:10808 && export HTTP_PROXY=http://localhost:10808";
nix-dir = "cd ~/.config/nix-on-droid";
q-ssh = "sv-start"; # start all supervised services (sshd, ...); manage with `sv status sshd` etc
# beets
beet-ima = "beet im ./ -A";
# ssh (hosts live in programs.ssh.settings below)
# NOTE: lamet / pubray-1 have no Host entry yet — kept as aliases.
z-l = "ssh lamet";
z-lt = "ssh lamet-tailscale";
z-p-1 = "ssh pubray-1";
z-map-local-proxy = "ssh -R 10808:localhost:10808";
# 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";
};
};
# ---- Editor ----
# NOTE: programs.nano is a NixOS-only module (does not exist in
# home-manager); write ~/.nanorc directly instead.
# ---- TUI tools ----
bat.enable = true;
lazygit.enable = true;
fzf.enable = true;
btop.enable = true;
broot.enable = true;
bottom.enable = true;
fastfetch.enable = true;
yazi = {
enable = true;
# explicit: shared module must behave identically on NixOS (26.05, "y")
# and nix-on-droid (24.05, legacy "yy")
shellWrapperName = "y";
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;
};
theme = {
flavor = {
light = "nord";
dark = "nord";
};
};
keymap = {
mgr.prepend_keymap = [
{
on = [
"M"
];
run = "plugin mount";
desc = "Mount manager";
}
{
on = [
"g"
"i"
];
run = "plugin lazygit";
desc = "run lazygit";
}
{
run = "plugin ouch --args=zip";
on = [
"g"
"C"
];
desc = "Compress with ouch";
}
];
};
settings = {
mgr.ratio = [
1
1
4
];
};
};
# ---- VCS ----
git = {
enable = true;
settings = {
user = {
name = "oqyude";
email = "oqyude@gmail.com";
};
pull = {
rebase = true;
};
};
};
# ---- SSH ----
# Declarative ~/.ssh/config, same as the one previously copied by hand.
# matchBlocks is deprecated in current home-manager; use `settings`
# (bare attr names become `Host` headers, keys are upstream directives).
ssh = {
enable = true;
# Reproduce the old enableDefaultConfig values explicitly.
enableDefaultConfig = false;
settings = {
"*" = {
ForwardAgent = false;
AddKeysToAgent = "no";
Compression = false;
ServerAliveInterval = 0;
ServerAliveCountMax = 3;
HashKnownHosts = false;
UserKnownHostsFile = "~/.ssh/known_hosts";
ControlMaster = "no";
ControlPath = "~/.ssh/master-%r@%n:%p";
ControlPersist = "no";
};
sapphira = {
HostName = "192.168.1.20";
User = "oqyude";
};
sapphira-tailscale = {
HostName = "100.64.0.0";
User = "oqyude";
};
otreca-old = {
HostName = "217.60.3.12";
User = "oqyude";
};
otreca = {
HostName = "109.248.161.5";
User = "oqyude";
};
otreca-tailscale = {
HostName = "100.64.1.0";
User = "oqyude";
};
rydiwo = {
HostName = "192.168.1.102";
User = "oqyude";
};
epral = {
HostName = "192.168.1.101";
User = "oqyude";
Port = 8022;
};
};
};
};
}
+8 -12
View File
@@ -5,9 +5,6 @@
xlib, xlib,
... ...
}: }:
let
panel = "${xlib.dirs.services-nodes-folder}/${xlib.device.hostname}/3x-ui";
in
{ {
virtualisation = { virtualisation = {
podman = { podman = {
@@ -28,8 +25,8 @@ in
"TZ" = "Europe/Moscow"; "TZ" = "Europe/Moscow";
}; };
volumes = [ volumes = [
"${panel}/cert/:/root/cert:rw" "${xlib.dirs.services-mnt-folder}/containers/3x-ui/cert/:/root/cert:rw"
"${panel}/db/:/etc/x-ui:rw" "${xlib.dirs.services-mnt-folder}/containers/3x-ui/db/:/etc/x-ui:rw"
]; ];
log-driver = "journald"; log-driver = "journald";
extraOptions = [ extraOptions = [
@@ -100,13 +97,12 @@ in
}; };
# Folders # Folders
tmpfiles.rules = [ tmpfiles.rules = [
"d ${xlib.dirs.services-mnt-folder} 0755 root root -" "d /mnt 0755 root root -"
"d ${xlib.dirs.services-nodes-folder} 0755 root root -" "d /mnt/containers 0755 root root -"
"d ${xlib.dirs.services-nodes-folder}/${xlib.device.hostname} 0755 root root -" "d /mnt/services/containers 0755 root root -"
"d ${panel} 0755 root root -" "d /mnt/services/containers/3x-ui 0755 root root -"
"d ${panel}/db 0755 root root -" "d /mnt/services/containers/3x-ui/cert 0755 root root -"
"d ${panel}/cert 0755 root root -" "d /mnt/services/containers/3x-ui/db 0755 root root -"
"Z ${panel} 0755 root root -"
]; ];
}; };
+2 -28
View File
@@ -9,14 +9,11 @@ let
... ...
}: }:
{ {
# NixOS-only modules. termux runs nix-on-droid (its own module system,
# class = "nixOnDroid"): options like services.*, users.*, sops.*, disko.*
# and nixpkgs.overlays (flake assertion) do not exist there.
imports = with inputs; [ imports = with inputs; [
./essentials ./essentials
./options.nix
./users.nix ./users.nix
(./. + "/${deviceType}") ./options.nix
(./. + "/${deviceType}") # specific modules
home-manager.nixosModules.home-manager # home-manager module home-manager.nixosModules.home-manager # home-manager module
# nix-index-database.nixosModules.nix-index # nix-index module # nix-index-database.nixosModules.nix-index # nix-index module
@@ -50,28 +47,6 @@ let
sops-nix.nixosModules.sops # sops module sops-nix.nixosModules.sops # sops module
]; ];
_module.args = {
inputs = inputs;
xlib = config.xlib;
};
};
strictModule =
{
config,
deviceType,
lib,
xlib,
...
}:
{
imports = with inputs; [
# ./essentials
# ./users.nix
./options.nix
(./. + "/${deviceType}")
# sops-nix.nixosModules.sops
];
_module.args = { _module.args = {
inputs = inputs; inputs = inputs;
xlib = config.xlib; xlib = config.xlib;
@@ -82,6 +57,5 @@ in
nixosModules = { nixosModules = {
default = defaultModule; default = defaultModule;
public = publicModule; public = publicModule;
strict = strictModule;
}; };
} }
+5
View File
@@ -4,6 +4,11 @@
inputs, inputs,
... ...
}: }:
let
master = import inputs.nixpkgs-master {
system = "x86_64-linux";
};
in
{ {
environment = { environment = {
systemPackages = with pkgs; [ systemPackages = with pkgs; [
-17
View File
@@ -1,17 +0,0 @@
root-ca: ENC[AES256_GCM,data:5WxHCyp8sWl+XMpmMFQGfs+IhZx0r61JVFp7TJsn4pnCwV2KY/eyh6pEF+GF+P7eXALPEWGzdFYTzMJd6KJ+D+Ew0bLomIZ+KVhlxhgVzKG0xThrLpxSuyrrRFFfXzMz7C28v1HlBht6xtwKouPnxQcXDYTLyV52w7FrhWTXPuJ+TvaYDlHJcs3wHY5U+UiCoQZMcM8ddNkgbMqCu+/QC4G213EoJvjhQz+woXzIuqN8SYsOVmQ5su9Xy1sDMc8vIF+vl1Ax1E+T7ZqnE4E/7Y7HNzBQFpBGZjTb3JLUoyO4ALo0S36Yls12MWj/AZBmoBG8yL4wwA48FBHzGyH1aYtbWA/twJLDYzmu9saORW/TKIMrzeruxdufWU9sRs1f2BxpefAa2kZ8QTxhx2+3kUiOC1lipIjdMu9RSeq7q4HmKRTmuuXW087ere+IMhogh11RoshttB1W0/BU/dz6sYwAnCioSoOCd3n+WBGfuMNyeDjkpNJ4veg2HuU/K84rLFjNsxWnRfQML0BjUDHzFypA4dNIDo/FI0Z1cOrPojiqjwKt5Fb0XljTwfDQvkRtcZOQLVln7HfJlsU67YUCBMgJUJUTC3XKo82smZbz8JV1z8I9hVfnSfoEMiqNvDu3wKPGDpjWq0hAKD2R82keKe3Ji33Z2O4HK0e0Q7vSPP/Z5gIAay2S2aS2YLpqlvgzipqiLo2owzM2Mr4NrKRL9Vg36na7bLBPEoz+l9EK8EEiZaq+c8H2+dpmXpdmnUMQDF5yBxs4EU2M6Ga+X+2SYd1q9aZBT0yxykFkQrMUcA==,iv:Ee4tvSVLdk0Clh8vohbajEaKXJlQJjqOIu2lxfWueAI=,tag:oy99+HrMV1uGCdcAy7epug==,type:str]
intermediate-ca: ENC[AES256_GCM,data:NUMdfNy+Opi/UypY1N2N8pZZK99m3VouzLxA7EKwC2sd2Q24uEflRfucjWupAASp7duncfSjmC1jQxCQpSzwV7Qbq3+PkKD+MnrceVzz40G97C5jEKEJG6ln5RdwGX5FeIF9tZpb/gBvkWcyrPQ6wDEpzd9rCDGJgvPzg/PaFuluO6UXKpppyC9Zzl2x/dms+2pV2aQcR0rEPEuXKK7NKxc+Zk3HFgcfhe26mbayZXZxdxs44vwPqPKr6xmWRiERBlCoMEfjLSWAiVjau/RXsW+/5Mtu80rbiRUHUesdZYIX4hqfoj914Mp1gsQ+bihnfBQ3xYyxtskBfHO8+oZNvOcDhx7zl8Vo+giD4435EYEFWNxjzRtbXoR0CHu50obmDDjpPcUpkRNzjpJK3VEJM45SEA2EZyupmf+Y8o4uHmOg/xTciVHLFqVOnchb6pm9WPbkyMT9K/+O9XvN3yVJzab6se6DdnEB/8PeA4s51M0ONk6PrFXSGdfwos84BmD8uaAqGhp64sXpTuunhfcmo02b1pZ2OqlGnjam5ZJOuyJ6vPeVYB/o60Dl/w5QtdeWc93EgsxNRAOyxOsrtSKdQPuZgp7+/I4S6kYaRJS8S7mvqSNdtCdrov1vYSEoHDXtu2XaDaJrStHJsP1FmTAAmXhzeyfGosB9JX7sdOGRkskesREqkzJ5V7+O0k3cpHFJvIZIFyj12rwpPSnrB66BELAQVxkqeol2dfPWn+G1aG9dmtq3T7+C3M5wW7VE41mmVgUrx9o4/8Z3wkHkBxZXiUkN4LfFHcZXmvuHFqRYYBOUpTzxRCkW6dl/gvP0qedMR3/zplhe51Gux7IFW7/s0wvTWHqWrpxirpW+c4l/IGf53Ox7kt3D,iv:atbEM7iZALuT1UipYmxlH0k0FOPJ7VKrfPrmCs3X9Mo=,tag:w6l49PKgjlzTZa1mIVpI4A==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSamN6dkxYalBZc25EYThR
NnV0YW5oQWgrQWNhSE9Gemt3VGljaE0rTGcwCnYyV2JpdW1GbEZTRElDNFk2Y213
bk1FY1grM2tuc0UzV21ROG5BanpjbFEKLS0tIG83dnpNQzEvYVZ1ODArRjlYSFRY
WHp0NktOQVF0UW1KajhYM3U5WkZCNmsKrN8T73fg7JoT+7WheveOC3Jlxa79EFjs
ePfVY07TKEHsycFhNyjcsFCWMF2ddE7q28A+Sjg+C3SA+/cHO8U9lw==
-----END AGE ENCRYPTED FILE-----
recipient: age13l2gtk0nzr484zprp7e0pkrt0ne0j4asyn2pjmlaw73nte7t7d8q4sqtxm
lastmodified: "2026-06-23T20:42:27Z"
mac: ENC[AES256_GCM,data:XftvodNnD0YXmd1GsNt2w820CWYY3v2pXOtlFYE0k25kuKNeKqqGDgN4geTA/xh6eYMrDut6mryNHOOoWXTuU9r/NvpXotwT5/vW2s4Nq+Cd9XySceJn/Ja6aN8R5ICbq3BhmpmC3SCVXDTce4+MwIHeBmp+Lrff+mXvZ5cT1A4=,iv:FqI/KdPJFHOMHykeZj0oEcuIZsCBWF1WCK4saz9Es7g=,tag:IZ1xHkB4eqkp04L2iAbkOw==,type:str]
unencrypted_suffix: _unencrypted
version: 3.13.1
+2 -49
View File
@@ -15,7 +15,7 @@
settings = { settings = {
require-sigs = false; require-sigs = false;
substituters = [ substituters = [
"https://nix-cache.zeroq.su" "http://100.64.0.0:5000"
"https://cache.nixos.org" "https://cache.nixos.org"
"https://nix-community.cachix.org" "https://nix-community.cachix.org"
"https://mirror.yandex.ru/nixos" "https://mirror.yandex.ru/nixos"
@@ -27,7 +27,7 @@
# "https://nixos.snix.store" # https://nixos.snix.store/ # "https://nixos.snix.store" # https://nixos.snix.store/
]; ];
trusted-public-keys = [ trusted-public-keys = [
"nix-cache.zeroq.su:be5jFLkiwNyOep/McxSafB3jguBmztxx+oJ46ySyc/s=" "cache.local:be5jFLkiwNyOep/McxSafB3jguBmztxx+oJ46ySyc/s="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
]; ];
stalled-download-timeout = 8; stalled-download-timeout = 8;
@@ -64,34 +64,6 @@
}); });
''; '';
}; };
pki.certificates = [
''
-----BEGIN CERTIFICATE-----
MIIBlDCCATmgAwIBAgIQUR+DM/LKIbokKxYPGZbCCjAKBggqhkjOPQQDAjAoMQ4w
DAYDVQQKEwVaZXJvUTEWMBQGA1UEAxMNWmVyb1EgUm9vdCBDQTAeFw0yNjA2MTMy
MjU2MDZaFw0zNjA2MTAyMjU2MDZaMCgxDjAMBgNVBAoTBVplcm9RMRYwFAYDVQQD
Ew1aZXJvUSBSb290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgbhGtnlm
qd2Uv1B1VBSeg6NlXFMj4BG/k5gVu9bVFBK4cw9HVx21aHw9HhFW94P2KaySR6bu
K8tLDtzvs0xkyqNFMEMwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8C
AQEwHQYDVR0OBBYEFH07/1blaqp0MVuSZIUHS9W3SjIrMAoGCCqGSM49BAMCA0kA
MEYCIQD1coTa7hqU1PAdnamAIgq1ApadDWpWfNaXPGiLCrkxTwIhAJhj/YSzqTJR
HvurdJ9m2glxV3rQHIUiVqKbQRcibObd
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIBvjCCAWOgAwIBAgIRAMiJigRk8xbvHhCWN6a7D68wCgYIKoZIzj0EAwIwKDEO
MAwGA1UEChMFWmVyb1ExFjAUBgNVBAMTDVplcm9RIFJvb3QgQ0EwHhcNMjYwNjEz
MjI1NjA3WhcNMzYwNjEwMjI1NjA3WjAwMQ4wDAYDVQQKEwVaZXJvUTEeMBwGA1UE
AxMVWmVyb1EgSW50ZXJtZWRpYXRlIENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
QgAE2gUlKZ/z9kt5RrdYZHnGE1TVVegn+aDmGpZk5uvF04O9k/sfjD6QE7VtjwNH
ervZKu3iBXGRg92ba0k369VJpKNmMGQwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB
/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCtYg4LEAHPIMrDPO7lrxKuFvw4PMB8GA1Ud
IwQYMBaAFH07/1blaqp0MVuSZIUHS9W3SjIrMAoGCCqGSM49BAMCA0kAMEYCIQD2
nNNHqs9/mIstOxetObgg8eqbrPWHXEVQ9CDucNFmQAIhANXAz2z1Rc7hxc6er23W
I8TU6UQc8dledPvalDJLyGym
-----END CERTIFICATE-----
''
];
}; };
systemd.network.wait-online.enable = false; systemd.network.wait-online.enable = false;
@@ -103,23 +75,4 @@
"ru_RU.UTF-8/UTF-8" "ru_RU.UTF-8/UTF-8"
]; ];
}; };
# sops.secrets = {
# intermediate-ca = {
# format = "yaml";
# key = "intermediate-ca";
# sopsFile = ./secrets/settings.yaml;
# # owner = "nobody";
# # group = "nogroup";
# mode = "0700";
# };
# root-ca = {
# format = "yaml";
# key = "root-ca";
# sopsFile = ./secrets/settings.yaml;
# # owner = "nobody";
# # group = "nogroup";
# mode = "0700";
# };
# };
} }
+4 -9
View File
@@ -19,18 +19,15 @@
theme = "robbyrussell"; theme = "robbyrussell";
}; };
shellInit = '' shellInit = ''
beet-n() {
echo "$*" | aichat -cer beets
}
beet-p() { beet-p() {
local base="/home/oqyude/.config/beets/My" beet mod path:. playlist="$*"
local rel
rel=$(realpath --relative-to="$base" "$PWD")
beet mod "path:$rel" playlist="$*"
} }
beet-ims() { beet-ims() {
beet im ./ -S $* beet im ./ -S $*
} }
beet-path() {
realpath --relative-to="/home/oqyude/.config/beets/My" "$1"
}
''; '';
shellAliases = { shellAliases = {
# shell # shell
@@ -45,9 +42,7 @@
gc = "git add . && git commit -m 'dev: автокоммит $(date +'%Y-%m-%d %H:%M:%S')'"; gc = "git add . && git commit -m 'dev: автокоммит $(date +'%Y-%m-%d %H:%M:%S')'";
y = "yazi"; y = "yazi";
nix-shellp = "nix-shell --run $SHELL -p"; nix-shellp = "nix-shell --run $SHELL -p";
beet-path-library = "realpath --relative-to='/home/oqyude/.config/beets/My' .";
z-proxy = "export ALL_PROXY=socks5://localhost:10808"; z-proxy = "export ALL_PROXY=socks5://localhost:10808";
zh-proxy = "export HTTPS_PROXY=http://localhost:10808 && export HTTP_PROXY=http://localhost:10808";
# beets # beets
beet-ima = "beet im ./ -A"; beet-ima = "beet im ./ -A";
+2
View File
@@ -4,4 +4,6 @@
... ...
}: }:
{ {
# imports = [
# ];
} }
-6
View File
@@ -16,7 +16,6 @@
"vds" "vds"
"vds-new" "vds-new"
"wsl" "wsl"
"termux"
]; ];
default = "minimal"; default = "minimal";
description = "Type of device for this host."; description = "Type of device for this host.";
@@ -118,11 +117,6 @@
default = "/mnt/services"; default = "/mnt/services";
description = "All services folder."; description = "All services folder.";
}; };
services-nodes-folder = lib.mkOption {
type = lib.types.str;
default = "${config.xlib.dirs.services-mnt-folder}/nodes";
description = "All nodes folder.";
};
postgresql-folder = lib.mkOption { postgresql-folder = lib.mkOption {
type = lib.types.str; type = lib.types.str;
default = "${config.xlib.dirs.services-mnt-folder}/postgresql"; default = "${config.xlib.dirs.services-mnt-folder}/postgresql";
+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"
];
};
};
};
}
-28
View File
@@ -1,28 +0,0 @@
{
config,
pkgs,
...
}:
{
security = {
acme = {
acceptTerms = true;
defaults = {
email = "oqyude@gmail.com";
};
# certs = {
# "home.arpa" = {
# email = "oqyude@zeroq.su";
# domain = "*.home.arpa";
# server = "https://localhost:9000/acme/acme/directory";
# listenHTTP = ":80";
# dnsProvider = null;
# };
# # "turn.home.arpa" = {
# # listenHTTP = "127.0.0.1:80";
# # group = "turnserver";
# # };
# };
};
};
}
+5 -8
View File
@@ -3,17 +3,14 @@
inputs, inputs,
... ...
}: }:
# let
# pkgs-stable = import inputs.nixpkgs-stable { system = "x86_64-linux"; };
# in
{ {
services.bentopdf = { services.bentopdf = {
enable = true; enable = true;
domain = "pdf.private"; domain = "bentopdf.local";
nginx = { nginx.enable = true;
enable = true;
# virtualHost = {
# forceSSL = true;
# enableACME = true;
# };
};
# package = pkgs-stable.bentopdf; # package = pkgs-stable.bentopdf;
}; };
} }
+4 -24
View File
@@ -6,14 +6,13 @@
... ...
}: }:
let let
stable = import inputs.nixpkgs-previous { stable = import inputs.nixpkgs-calibre {
system = "x86_64-linux"; system = "x86_64-linux";
}; };
in in
{ {
services = { services.calibre-web = {
calibre-web = { package = stable.calibre-web;
# package = stable.calibre-web;
enable = true; enable = true;
# dataDir = "${xlib.dirs.services-mnt-folder}/calibre-web"; # dataDir = "${xlib.dirs.services-mnt-folder}/calibre-web";
options = { options = {
@@ -26,26 +25,8 @@ in
listen.port = 8083; listen.port = 8083;
openFirewall = true; openFirewall = true;
}; };
# calibre-server = {
# enable = true;
# port = 8091;
# host = "0.0.0.0";
# openFirewall = true;
# user = "calibre-web";
# group = "calibre-web";
# libraries = [
# "/var/lib/calibre-server"
# ];
# };
};
systemd.tmpfiles.rules = [ fileSystems."/var/lib/calibre-web" = {
"d ${xlib.dirs.services-mnt-folder}/calibre-web 0755 calibre-web calibre-web -"
"d ${xlib.dirs.services-mnt-folder}/calibre-web-library 0755 calibre-web calibre-web -"
];
fileSystems = {
"/var/lib/calibre-web" = {
device = "${xlib.dirs.services-mnt-folder}/calibre-web"; device = "${xlib.dirs.services-mnt-folder}/calibre-web";
fsType = "none"; fsType = "none";
options = [ options = [
@@ -53,5 +34,4 @@ in
"nofail" "nofail"
]; ];
}; };
};
} }
-10
View File
@@ -1,10 +0,0 @@
{
config,
pkgs,
...
}:
{
services.chrony = {
enable = true;
};
}
-63
View File
@@ -1,63 +0,0 @@
{
config,
pkgs,
...
}:
{
services.coredns = {
enable = true;
config = ''
zeroq.su:53 {
hosts {
109.248.161.5 x.zeroq.su
192.168.1.20 calibre.zeroq.su
192.168.1.20 dns.zeroq.su
192.168.1.20 flux.zeroq.su
192.168.1.20 git.zeroq.su
192.168.1.20 glances.zeroq.su
192.168.1.20 homebox.zeroq.su
192.168.1.20 immich.zeroq.su
192.168.1.20 kuma.zeroq.su
192.168.1.20 navidrome.zeroq.su
192.168.1.20 nextcloud.zeroq.su
192.168.1.20 office.zeroq.su
192.168.1.20 pdf.zeroq.su
192.168.1.20 syncthing.zeroq.su
192.168.1.20 talk.zeroq.su
192.168.1.20 turn.zeroq.su
fallthrough
}
cache 300
log
}
home.arpa:53 {
hosts {
192.168.1.100 vetymae.home.arpa
192.168.1.20 ca.home.arpa
192.168.1.20 calibre.home.arpa
192.168.1.20 dns.home.arpa
192.168.1.20 flux.home.arpa
192.168.1.20 git.home.arpa
192.168.1.20 glances.home.arpa
192.168.1.20 home.arpa
192.168.1.20 homebox.home.arpa
192.168.1.20 immich.home.arpa
192.168.1.20 kuma.home.arpa
192.168.1.20 navidrome.home.arpa
192.168.1.20 nextcloud.home.arpa
192.168.1.20 office.home.arpa
192.168.1.20 pdf.home.arpa
192.168.1.20 sapphira.home.arpa
192.168.1.20 syncthing.home.arpa
fallthrough
}
cache 300
log
}
.:53 {
forward . 192.168.1.1 1.1.1.1
cache 300
}
'';
};
}
-53
View File
@@ -1,53 +0,0 @@
{
config,
inputs,
lib,
pkgs,
xlib,
...
}:
# let
# acme-path = "/var/lib/acme";
# in
{
services.coturn = {
enable = false;
realm = "turn.home.arpa";
# cert = "${acme-path}/turn.home.arpa/fullchain.pem";
# pkey = "${acme-path}/turn.home.arpa/key.pem";
use-auth-secret = true;
static-auth-secret-file = config.sops.secrets.turn-secret.path;
no-cli = true;
listening-port = 3478; # TURN
# tls-listening-port = 5349; # TURNS
extraConfig = ''
min-port=49160
max-port=49200
'';
};
networking.firewall = {
allowedTCPPorts = [
3478
# 5349
];
allowedUDPPorts = [
3478
];
allowedUDPPortRanges = [
{
from = 49160;
to = 49200;
}
];
};
sops.secrets = {
turn-secret = {
format = "yaml";
key = "turn-secret";
sopsFile = ./secrets/coturn.yaml;
group = "nextcloud-spreed-signaling";
owner = "turnserver";
mode = "0440";
};
};
}
+7 -14
View File
@@ -5,41 +5,34 @@
{ {
imports = [ imports = [
../software/beets ../software/beets
./acme.nix
./bentopdf.nix ./bentopdf.nix
./calibre-web.nix ./calibre-web.nix
./chrony.nix
./coredns.nix
./gitea.nix ./gitea.nix
./glances.nix ./glances.nix
./homebox.nix
./immich.nix ./immich.nix
./miniflux.nix ./miniflux.nix
./n8n.nix
./navidrome.nix ./navidrome.nix
./netdata.nix
./nextcloud.nix ./nextcloud.nix
./nginx.nix ./nginx.nix
./nix-serve.nix ./nix-serve.nix
./onlyoffice.nix ./open-webui.nix
./postgresql.nix ./postgresql.nix
./power.nix
./samba.nix ./samba.nix
# ./step-ca.nix ./step-ca.nix
./stirling-pdf.nix
./syncthing.nix ./syncthing.nix
./systemd.nix ./systemd.nix
./transmission.nix
./uptime-kuma.nix
# ../containers/remnawave.nix # ../containers/remnawave.nix
# ./coturn.nix
# ./mealie.nix # ./mealie.nix
# ./memos.nix # ./memos.nix
# ./n8n.nix
# ./netdata.nix
# ./nfs.nix # ./nfs.nix
# ./node-red.nix # ./node-red.nix
# ./open-webui.nix
# ./rsync.nix # ./rsync.nix
# ./stirling-pdf.nix
# ./transmission.nix
# ./trilium.nix # ./trilium.nix
# ./uptime-kuma.nix
# ./zerotier.nix # ./zerotier.nix
]; ];
} }
+1 -2
View File
@@ -14,7 +14,7 @@
appName = "ZeroQ Gitea Service"; appName = "ZeroQ Gitea Service";
settings = { settings = {
server = { server = {
DOMAIN = "git.zeroq.su"; DOMAIN = "gitea.local";
HTTP_PORT = 3000; HTTP_PORT = 3000;
}; };
service.DISABLE_REGISTRATION = true; service.DISABLE_REGISTRATION = true;
@@ -23,7 +23,6 @@
}; };
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [
"d ${config.services.gitea.stateDir} 0755 gitea gitea -"
"z ${config.services.gitea.stateDir} 0755 gitea gitea -" "z ${config.services.gitea.stateDir} 0755 gitea gitea -"
]; ];
} }
-44
View File
@@ -1,44 +0,0 @@
{
config,
pkgs,
xlib,
...
}:
let
configDir = "${xlib.dirs.services-mnt-folder}/homebox";
varDir = "/var/lib/homebox";
in
{
services.homebox = {
enable = true;
settings = {
HBOX_WEB_HOST = "0.0.0.0";
HBOX_WEB_PORT = "7745";
HBOX_STORAGE_CONN_STRING = "file://${varDir}";
HBOX_STORAGE_PREFIX_PATH = "data";
HBOX_DATABASE_DRIVER = "sqlite3";
HBOX_DATABASE_SQLITE_PATH = "${varDir}/data/homebox.db?_pragma=busy_timeout=999&_pragma=journal_mode=WAL&_fk=1";
HBOX_OPTIONS_ALLOW_REGISTRATION = "true";
HBOX_OPTIONS_GITHUB_RELEASE_CHECK = "false";
HBOX_MODE = "production";
HOME = "${varDir}";
TMPDIR = "${varDir}/tmp";
};
};
systemd.tmpfiles.rules = [
"d ${configDir} 0755 homebox homebox -"
"z ${configDir} 0755 homebox homebox -"
];
fileSystems = {
"${varDir}" = {
device = "${configDir}";
fsType = "none";
options = [
"bind"
"nofail"
];
};
};
}
+6
View File
@@ -6,10 +6,16 @@
xlib, xlib,
... ...
}: }:
let
master = import inputs.nixpkgs-master {
system = "x86_64-linux";
};
in
{ {
services = { services = {
immich = { immich = {
enable = true; enable = true;
# package = master.immich;
port = 2283; port = 2283;
host = "0.0.0.0"; host = "0.0.0.0";
openFirewall = true; openFirewall = true;
+1 -1
View File
@@ -12,7 +12,7 @@ let
in in
{ {
services.n8n = { services.n8n = {
enable = false; enable = true;
environment = { environment = {
# N8N_USER_FOLDER = lib.mkForce "${configDir}"; # N8N_USER_FOLDER = lib.mkForce "${configDir}";
N8N_SECURE_COOKIE = "false"; N8N_SECURE_COOKIE = "false";
+2 -2
View File
@@ -9,12 +9,12 @@
{ {
services = { services = {
navidrome = { navidrome = {
enable = true; enable = false;
openFirewall = true; openFirewall = true;
# environmentFile = ""; # environmentFile = "";
settings = { settings = {
Address = "0.0.0.0"; Address = "0.0.0.0";
Port = 4533; Port = "4533";
MusicFolder = "/mnt/beets/music"; MusicFolder = "/mnt/beets/music";
}; };
}; };
+35 -86
View File
@@ -1,60 +1,34 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
inputs,
xlib, xlib,
... ...
}: }:
let
master = import inputs.nixpkgs-master {
system = "x86_64-linux";
# config.allowUnfree = true;
# config.allowUnfreePredicate = true;
};
in
{ {
services = { services = {
nextcloud-whiteboard-server = { nextcloud-whiteboard-server = {
enable = true; enable = true;
settings = { settings = {
NEXTCLOUD_URL = "https://nextcloud.zeroq.su"; NEXTCLOUD_URL = "http://nextcloud.private";
}; };
secrets = [ config.sops.secrets.nextcloud-whiteboard-jwt.path ]; secrets = [ config.sops.secrets.nextcloud-whiteboard-jwt.path ];
}; };
nextcloud-spreed-signaling = {
enable = false;
hostName = "talk.private";
backends.nextcloud = {
urls = [
"https://nextcloud.zeroq.su"
# "https://nextcloud.home.arpa"
];
secretFile = config.sops.secrets.nextcloud-talk-secret.path;
};
settings = {
http.listen = "127.0.0.1:8080";
clients.internalsecretFile = config.sops.secrets.internal-secret.path;
sessions = {
hashkeyFile = config.sops.secrets.hashkey.path;
blockkeyFile = config.sops.secrets.blockkey.path;
};
mcu = {
type = "janus";
url = "ws://127.0.0.1:8188";
};
turn = {
secretFile = config.sops.secrets.turn-secret.path;
apikeyFile = config.sops.secrets.turn-api-key.path;
servers = [
"turn:turn.zeroq.su:3478?transport=udp"
"turn:turn.zeroq.su:3478?transport=tcp"
# "turns:turn.zeroq.su:5349?transport=tcp"
];
};
};
};
nextcloud = { nextcloud = {
enable = true; enable = true;
package = pkgs.nextcloud34; package = pkgs.nextcloud33;
hostName = "nextcloud.private"; hostName = "nextcloud.private";
database.createLocally = true; database.createLocally = true;
home = "${xlib.dirs.services-mnt-folder}/nextcloud"; home = "${xlib.dirs.services-mnt-folder}/nextcloud";
configureRedis = true; configureRedis = true;
https = true;
caching = { caching = {
redis = true; redis = true;
memcached = true; memcached = true;
@@ -72,28 +46,24 @@
trusted_domains = [ trusted_domains = [
"100.64.0.0" "100.64.0.0"
"192.168.1.20" "192.168.1.20"
"37.128.246.126"
"localhost" "localhost"
"nextcloud.home.arpa" "nextcloud.local"
"nextcloud.private" "nextcloud.private"
"nextcloud.zeroq.su" "nextcloud.zeroq.su"
"office.home.arpa" "office.local"
"office.zeroq.su" "office.zeroq.su"
]; ];
trusted_proxies = [ trusted_proxies = [
"100.64.1.0" "100.64.1.0"
"109.248.161.5" "109.248.161.5"
"192.168.1.20"
"37.128.246.126"
]; ];
overwriteprotocol = "https"; # maybe no overwriteprotocol = ""; # maybe no
}; };
extraAppsEnable = true; extraAppsEnable = true;
appstoreEnable = false; appstoreEnable = false;
notify_push = { notify_push = {
enable = true; enable = false;
bendDomainToLocalhost = true; bendDomainToLocalhost = true;
nextcloudUrl = "https://nextcloud.zeroq.su";
}; };
# phpPackage = pkgs.php85; # phpPackage = pkgs.php85;
extraApps = { extraApps = {
@@ -165,6 +135,15 @@
# }; # };
# }; # };
# }; # };
onlyoffice = {
enable = true;
hostname = "office.local";
port = 8090;
allowLocalConnections = true;
wopi = true;
jwtSecretFile = config.sops.secrets.onlyoffice-jwt.path;
securityNonceFile = config.sops.secrets.onlyoffice-nonce.path;
};
}; };
# fonts.packages = [ work.corefonts ]; # fonts.packages = [ work.corefonts ];
@@ -225,51 +204,21 @@
group = "nextcloud"; group = "nextcloud";
mode = "0650"; mode = "0650";
}; };
nextcloud-talk-secret = { onlyoffice-nonce = {
format = "yaml"; format = "yaml";
key = "nextcloud-talk-secret"; key = "nonce";
sopsFile = ./secrets/nextcloud.yaml; sopsFile = ./secrets/onlyoffice.yaml;
# owner = "nextcloud-spreed-signaling"; owner = "onlyoffice";
# group = "nextcloud-spreed-signaling"; group = "onlyoffice";
mode = "0440"; mode = "0650";
}; };
internal-secret = { onlyoffice-jwt = {
format = "yaml"; format = "yaml";
key = "internal-secret"; key = "jwt";
sopsFile = ./secrets/nextcloud.yaml; sopsFile = ./secrets/onlyoffice.yaml;
# owner = "nextcloud-spreed-signaling"; owner = "onlyoffice";
# group = "nextcloud-spreed-signaling"; group = "onlyoffice";
mode = "0440"; mode = "0650";
};
hashkey = {
format = "yaml";
key = "hashkey";
sopsFile = ./secrets/nextcloud.yaml;
# owner = "nextcloud-spreed-signaling";
# group = "nextcloud-spreed-signaling";
mode = "0440";
};
blockkey = {
format = "yaml";
key = "blockkey";
sopsFile = ./secrets/nextcloud.yaml;
# owner = "nextcloud-spreed-signaling";
# group = "nextcloud-spreed-signaling";
mode = "0440";
};
turn-secret = {
format = "yaml";
key = "turn-secret";
sopsFile = ./secrets/coturn.yaml;
# group = "nextcloud-spreed-signaling";
mode = "0440";
};
turn-api-key = {
format = "yaml";
key = "turn-api-key";
sopsFile = ./secrets/coturn.yaml;
# group = "nextcloud-spreed-signaling";
mode = "0440";
}; };
}; };
} }
+110 -353
View File
@@ -29,17 +29,29 @@ in
addr = "192.168.1.20"; addr = "192.168.1.20";
port = 10000; port = 10000;
} }
{
addr = "127.0.0.1";
port = 10000;
}
]; ];
}; };
"office.zeroq.su" = { "office.local" = {
forceSSL = true; forceSSL = false;
enableACME = true; enableACME = false;
# locations = {
# "/" = {
# proxyPass = "http://localhost:8090";
# proxyWebsockets = true;
# };
# };
# extraConfig = ''
# proxy_set_header Host $host;
# proxy_set_header X-Forwarded-Proto $scheme;
# proxy_set_header X-Forwarded-Host $host;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# '';
}; };
"pdf.private" = { "bentopdf.local" = {
forceSSL = false; forceSSL = false;
enableACME = false; enableACME = false;
listen = [ listen = [
@@ -55,289 +67,14 @@ in
addr = "192.168.1.20"; addr = "192.168.1.20";
port = 8446; port = 8446;
} }
{
addr = "127.0.0.1";
port = 8446;
}
]; ];
extraConfig = '' extraConfig = ''
client_max_body_size 5G; client_max_body_size 5G;
''; '';
}; };
# "pdf.home.arpa" = { "nextcloud.local" = {
# forceSSL = true; forceSSL = false;
# enableACME = true; enableACME = false;
# locations = {
# "/" = {
# proxyPass = "http://127.0.0.1:8446";
# proxyWebsockets = true;
# };
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
# "homebox.home.arpa" = {
# forceSSL = true;
# enableACME = true;
# locations = {
# "/" = {
# proxyPass = "http://127.0.0.1:7745";
# proxyWebsockets = true;
# };
# };
# };
# "nextcloud.home.arpa" = {
# forceSSL = true;
# enableACME = true;
# locations = {
# "/" = {
# proxyPass = "http://127.0.0.1:10000";
# proxyWebsockets = true;
# };
# "/whiteboard" = {
# proxyPass = "http://127.0.0.1:3002";
# proxyWebsockets = true;
# };
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
# "talk.home.arpa" = {
# forceSSL = true;
# enableACME = true;
# # locations = {
# # "/" = {
# # proxyPass = "http://127.0.0.1:7880";
# # proxyWebsockets = true;
# # };
# # };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
# "turn.home.arpa" = {
# forceSSL = true;
# enableACME = true;
# locations = {
# "/" = {
# proxyPass = "http://127.0.0.1:5349";
# proxyWebsockets = true;
# };
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
# "ca.zeroq.su" = {
# forceSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://127.0.0.1:9000";
# proxyWebsockets = true;
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
# "git.home.arpa" = {
# forceSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://127.0.0.1:3000";
# proxyWebsockets = true;
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
# "n8n.home.arpa" = {
# forceSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://${server}:5678";
# proxyWebsockets = true;
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
# "kuma.home.arpa" = {
# forceSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://127.0.0.1:4001";
# proxyWebsockets = true;
# };
# };
# "flux.home.arpa" = {
# addSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://127.0.0.1:6061";
# proxyWebsockets = true;
# };
# };
# "navidrome.home.arpa" = {
# addSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://127.0.0.1:4533";
# proxyWebsockets = true;
# };
# };
# "immich.home.arpa" = {
# addSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://127.0.0.1:2283";
# proxyWebsockets = true;
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
"immich.zeroq.su" = {
addSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:2283";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 5G;
'';
};
"kuma.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:4001";
proxyWebsockets = true;
};
};
"health.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:19999";
proxyWebsockets = true;
};
};
"git.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:3000";
proxyWebsockets = true;
};
};
"homebox.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:7745";
proxyWebsockets = true;
};
};
# "agent.zeroq.su" = {
# forceSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://${server}:3000";
# proxyWebsockets = true;
# };
# };
# "node-red.zeroq.su" = {
# forceSSL = true;
# enableACME = true;
# kTLS = true;
# locations."/" = {
# proxyPass = "http://${server}:1880";
# proxyWebsockets = true;
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
"zeroq.su" = {
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.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:6061";
proxyWebsockets = true;
};
};
"navidrome.zeroq.su" = {
addSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:4533";
proxyWebsockets = true;
};
};
"vetymae.opencodes.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://100.86.62.4:4096";
proxyWebsockets = true;
};
};
"lamet.opencodes.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://100.106.21.39:6061";
proxyWebsockets = true;
};
};
"n8n.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:5678";
proxyWebsockets = true;
};
};
# "office.zeroq.su" = {
# enableACME = true;
# forceSSL = true;
# locations = {
# "/" = {
# proxyPass = "http://${server}:8090";
# proxyWebsockets = true;
# };
# };
# };
"nextcloud.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations = { locations = {
"/" = { "/" = {
proxyPass = "http://${server}:10000"; proxyPass = "http://${server}:10000";
@@ -352,9 +89,90 @@ in
client_max_body_size 5G; client_max_body_size 5G;
''; '';
}; };
"calibre.zeroq.su" = { "gitea.local" = {
forceSSL = true; forceSSL = false;
enableACME = true; enableACME = false;
locations."/" = {
proxyPass = "http://${server}:3000";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 5G;
'';
};
"n8n.local" = {
forceSSL = false;
enableACME = false;
locations."/" = {
proxyPass = "http://${server}:5678";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 5G;
'';
};
"kuma.local" = {
forceSSL = false;
enableACME = false;
locations."/" = {
proxyPass = "http://${server}:4001";
proxyWebsockets = true;
};
};
"health.local" = {
forceSSL = false;
enableACME = false;
locations."/" = {
proxyPass = "http://${server}:19999";
proxyWebsockets = true;
};
};
"agent.local" = {
forceSSL = false;
enableACME = false;
locations."/" = {
proxyPass = "http://${server}:3000";
proxyWebsockets = true;
};
};
"flux.local" = {
forceSSL = false;
enableACME = false;
locations."/" = {
proxyPass = "http://${server}:6061";
proxyWebsockets = true;
};
};
"immich.local" = {
forceSSL = false;
enableACME = false;
locations."/" = {
proxyPass = "http://${server}:2283";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 5G;
'';
};
# "office.local" = {
# enableACME = false;
# forceSSL = false;
# locations = {
# "/" = {
# proxyPass = "http://${server}:8000"; # 9980
# 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;
# };
"calibre.local" = {
forceSSL = false;
enableACME = false;
locations."/" = { locations."/" = {
proxyPass = "http://${server}:8083"; proxyPass = "http://${server}:8083";
proxyWebsockets = true; proxyWebsockets = true;
@@ -363,66 +181,9 @@ in
client_max_body_size 5G; client_max_body_size 5G;
''; '';
}; };
"nix-cache.zeroq.su" = { # "zeroq.local" = {
forceSSL = true; # forceSSL = false;
enableACME = true; # enableACME = false;
locations."/" = {
proxyPass = "http://${server}:5000";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 5G;
'';
};
"pdf.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:8446";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 5G;
'';
};
# "calibre.home.arpa" = {
# forceSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://127.0.0.1:8083";
# proxyWebsockets = true;
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
# "dns.home.arpa" = {
# forceSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://127.0.0.1:53";
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
# "glances.home.arpa" = {
# forceSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://127.0.0.1:61208";
# };
# };
# "syncthing.home.arpa" = {
# addSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://127.0.0.1:8384";
# };
# };
# "zeroq.home.arpa" = {
# forceSSL = true;
# enableACME = true;
# root = pkgs.writeTextDir "index.html" '' # root = pkgs.writeTextDir "index.html" ''
# <!doctype html> # <!doctype html>
# <html> # <html>
@@ -445,8 +206,4 @@ in
}; };
}; };
}; };
networking.firewall.allowedTCPPorts = [
80
443
];
} }
-1
View File
@@ -8,7 +8,6 @@
services = { services = {
nix-serve = { nix-serve = {
enable = true; enable = true;
package = pkgs.nix-serve-ng;
openFirewall = true; openFirewall = true;
port = 5000; port = 5000;
bindAddress = "0.0.0.0"; bindAddress = "0.0.0.0";
-45
View File
@@ -1,45 +0,0 @@
{
config,
inputs,
lib,
pkgs,
xlib,
...
}:
let
previous = import inputs.nixpkgs-master {
system = "x86_64-linux";
config.allowUnfree = true;
config.allowUnfreePredicate = true;
};
in
{
services.onlyoffice = {
enable = true;
# package = previous.onlyoffice-documentserver;
hostname = "office.zeroq.su";
port = 8090;
allowLocalConnections = true;
wopi = true;
jwtSecretFile = config.sops.secrets.onlyoffice-jwt.path;
securityNonceFile = config.sops.secrets.onlyoffice-nonce.path;
};
sops.secrets = {
onlyoffice-nonce = {
format = "yaml";
key = "nonce";
sopsFile = ./secrets/onlyoffice.yaml;
owner = "onlyoffice";
group = "onlyoffice";
mode = "0650";
};
onlyoffice-jwt = {
format = "yaml";
key = "jwt";
sopsFile = ./secrets/onlyoffice.yaml;
owner = "onlyoffice";
group = "onlyoffice";
mode = "0650";
};
};
}
+5
View File
@@ -6,6 +6,11 @@
xlib, xlib,
... ...
}: }:
let
master = import inputs.nixpkgs-master {
system = "x86_64-linux";
};
in
{ {
services = { services = {
postgresql = { postgresql = {
-16
View File
@@ -1,16 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
services = {
tuned = {
enable = true;
};
auto-cpufreq.enable = false;
power-profiles-daemon.enable = lib.mkForce false;
throttled.enable = false;
};
}
+2 -29
View File
@@ -1,23 +1,13 @@
{ {
config, config,
inputs,
pkgs,
xlib, xlib,
... ...
}: }:
{ {
services = { services.samba = {
samba-wsdd = {
enable = true; enable = true;
openFirewall = true;
hostname = "sapphira";
discovery = true;
};
samba = {
enable = true;
# package = pkgs.samba4Full;
nmbd = { nmbd = {
enable = true; enable = false;
}; };
settings = { settings = {
global = { global = {
@@ -63,21 +53,4 @@
}; };
}; };
}; };
};
systemd.tmpfiles.rules = [
"d ${xlib.dirs.services-mnt-folder}/samba 0755 root root -"
"z ${xlib.dirs.services-mnt-folder}/samba 0755 root root -"
];
fileSystems = {
"/var/lib/samba" = {
device = "${xlib.dirs.services-mnt-folder}/samba";
fsType = "none";
options = [
"bind"
"nofail"
];
};
};
} }
-17
View File
@@ -1,17 +0,0 @@
turn-secret: ENC[AES256_GCM,data:M8dIzxKmv/x07/KNFTB+0JusGNA61J9r8VaR1Yy/j8Lo5x+NI2S1+rytvUutGxnTnYVqXynozs3ABfIDu/yzyA==,iv:X70EiZNkjbSL2R0S79D2Ey6tMiU35Gr4ROcxbX6df70=,tag:dJjSBSyK2RtIdXP5npWOQA==,type:str]
turn-api-key: ENC[AES256_GCM,data:xFV8ZCDSPrtybCSIas4JEamsYX6fqd0IZIdNqv7cfk0R5+rKsvJYzAFc2RcREOafiGrA6nR85NvldhoAB06HIQ==,iv:DeqlY9jBByn42ygx2TiRQscPYqKwxvGZyhLEo1nmAgw=,tag:RCW0LJqFANWycASBsBuKYA==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOdVI1aUJDZ2gxWUhpSllL
dVRZS0cvYjVBeWlhNytpK09nMVBFQU1aOUVrCnpOdit6bGxxYmhJNTYwMkdKOWdI
QTQzZUhDc3ZCeTlFVWZER2U5dUxDNG8KLS0tIDRYUW02ZjV4OFNyTkhRa0ZDMU1Q
NzNnQXloNE9LODA3SXpUTzExU0RuUFUKOSmHSr4oKj+MdSLv1bXzGWdj+xBS4cXq
93hxORbXILr96DUfQucNHkAHT4BcW0TIE1F5EyOL1HVEnI3/WEuR4w==
-----END AGE ENCRYPTED FILE-----
recipient: age13l2gtk0nzr484zprp7e0pkrt0ne0j4asyn2pjmlaw73nte7t7d8q4sqtxm
lastmodified: "2026-06-30T08:02:46Z"
mac: ENC[AES256_GCM,data:NG0b9LrWQ1E6rQOxDvhAqu190a3EDmGwQV49ezuCVZmjr4okajomjCe3Q37KdG+d576RXldtciPq2ZNhEPzuC51kEvNk1x1oMn64lNDrYWXwev4tI+NcdpLm8W2hPeU6jsnY4NZAQf9YUvjJIwXyO2fhuR8AovRsUPj9A8fEjJU=,iv:H7C/GBsh8Zal3p+FXY7BjBCTVTEkC9ma4molPODsZDU=,tag:+V+mI88apssiXr3cJPQeiw==,type:str]
unencrypted_suffix: _unencrypted
version: 3.13.1
+5 -9
View File
@@ -1,12 +1,9 @@
adminpass: ENC[AES256_GCM,data:Fm+Q6YWXxouP5cX2WHU05Jr49FU=,iv:Exf/li6bL6xpR9HQ8XDDSprjx4ltHkJFl99Ga+gXwmQ=,tag:iB9d5O4982tr7lPu1nWccQ==,type:str] adminpass: ENC[AES256_GCM,data:Fm+Q6YWXxouP5cX2WHU05Jr49FU=,iv:Exf/li6bL6xpR9HQ8XDDSprjx4ltHkJFl99Ga+gXwmQ=,tag:iB9d5O4982tr7lPu1nWccQ==,type:str]
whiteboard-jwt: ENC[AES256_GCM,data:5i+x8VODrBIhGEWS5Ua6lrk7tsfk6xTa/1qm1rXe4A==,iv:2gFEeudip7BxJh553QtZ1CZo9T8jro3Q/Afdo8ouHtw=,tag:HgBM9ta41rhXJlsQJ+asFg==,type:str] whiteboard-jwt: ENC[AES256_GCM,data:5i+x8VODrBIhGEWS5Ua6lrk7tsfk6xTa/1qm1rXe4A==,iv:2gFEeudip7BxJh553QtZ1CZo9T8jro3Q/Afdo8ouHtw=,tag:HgBM9ta41rhXJlsQJ+asFg==,type:str]
nextcloud-talk-secret: ENC[AES256_GCM,data:rdPoTwP00N3VdYKVMG1JgBL4GdXbJAGYIyBHGrVoH1kP0+vU9ImHFfhPNOGTJasTcsVH9Ub+ewLw8cnhBpjFGw==,iv:dOY3kuYZt+Uw1RqNLMV1AJirQXl6UZrD4TCSibnM+nI=,tag:gzkJCN7ipqKV3UdrSF6aGQ==,type:str]
internal-secret: ENC[AES256_GCM,data:5dUblSAYYKaBXJj4nzHHggQp3+76Ubc0SE6VGbT6wzO+Zavdy/vo8JtVPkq3WZddyqJX9sgc2mn4fIXRRU+Zkg==,iv:A240Os4SEN+O9GT0HwX6WrGJx9TAYnJDSyW609vmES0=,tag:8p05AcrovwTaxxt+vFri9A==,type:str]
hashkey: ENC[AES256_GCM,data:49w+JLFgN1pcV8QqcW+URURIypnZMi5RC6E7U60HgrY=,iv:u0r2QgVehL/Y0xSiDTvBc2yOw1fWL/PQgT+n6ZSGf4M=,tag:NF9h6FWwjX2RUxy5YN6ODA==,type:str]
blockkey: ENC[AES256_GCM,data:t/w0aENV7X0/tiAoJWi74BKFsaGZblfCnsYPg271aBQ=,iv:hWiFMDEtq6g/11dAvtUun3wgZw2J4jbIMOz3ly4o34Q=,tag:z2DYXT+rylpgOp/0CY7qDQ==,type:str]
sops: sops:
age: age:
- enc: | - recipient: age13l2gtk0nzr484zprp7e0pkrt0ne0j4asyn2pjmlaw73nte7t7d8q4sqtxm
enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxNWFiUlZXMEEvNll0aFFk YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxNWFiUlZXMEEvNll0aFFk
UldxNitqaDgyenBFeWRhLzUxSVVhQk55Q1FBCkdLU3p4S0NTOVhERkRoaWVwbWVB UldxNitqaDgyenBFeWRhLzUxSVVhQk55Q1FBCkdLU3p4S0NTOVhERkRoaWVwbWVB
@@ -14,8 +11,7 @@ sops:
WGVQYjZtaHhaeC9pMzYxYmxTcVNtYk0KKxXXNA9h0fs+mA6U/Vsyg+q1CPl5hFrI WGVQYjZtaHhaeC9pMzYxYmxTcVNtYk0KKxXXNA9h0fs+mA6U/Vsyg+q1CPl5hFrI
Ozjqh+dzwajQeqkCPUdCsoeIWsvBY2Cyabvs+f0zj8S00faXb8rVQQ== Ozjqh+dzwajQeqkCPUdCsoeIWsvBY2Cyabvs+f0zj8S00faXb8rVQQ==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
recipient: age13l2gtk0nzr484zprp7e0pkrt0ne0j4asyn2pjmlaw73nte7t7d8q4sqtxm lastmodified: "2026-03-30T12:49:45Z"
lastmodified: "2026-06-30T07:33:27Z" mac: ENC[AES256_GCM,data:1EkbMGa6nK53GqGWYvXZP+sqy91AldGKy/32CVPshZwvTzJtk/VeK3W9A3fIGwvo7gl+QVWJmSiqrOTql4v+U4Yi3jVLEXsHXA5Bh28aJ7Ng9nkZmI10K7oaYF1xWNxzwss4gcDNIuomK+wG1WNLaiLbxwCBkN6xHugWQ4F+DLs=,iv:UmI6nC7dIHGeas54taf5kTIINvyd8YXyOVdIYghwHmE=,tag:VxdJLXRYin8D07r6CCA00A==,type:str]
mac: ENC[AES256_GCM,data:fZlKozBczGDWfhXKyJXmW/I/7GdKKoPG/NVNt2ncoK2a+pjHglJ0Ur9Zg02v05Fb37MmFznmHH2nn4W4av1TX118dX4jkni2aue06NEF3L8iali+sHFPUSI+uT8SvG0DW7ZvllPNwyPNgzeZPLIKqRRGZ7CgOqKe6IWOha4jAhg=,iv:7gfdmYmktzRXq7ANwXOdOKVgZEe0kfFIPKEvEnhfKrc=,tag:3tkVXh+89Q/uW8TCHZtWWQ==,type:str]
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.13.1 version: 3.12.2
+2 -2
View File
@@ -10,7 +10,7 @@ sops:
IUYmiWPlPd1IDV1NeMtlSYtO8exzB22XL9DqW4x/tJ7DeSZaBsjcOw== IUYmiWPlPd1IDV1NeMtlSYtO8exzB22XL9DqW4x/tJ7DeSZaBsjcOw==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
recipient: age13l2gtk0nzr484zprp7e0pkrt0ne0j4asyn2pjmlaw73nte7t7d8q4sqtxm recipient: age13l2gtk0nzr484zprp7e0pkrt0ne0j4asyn2pjmlaw73nte7t7d8q4sqtxm
lastmodified: "2026-06-23T20:42:29Z" lastmodified: "2026-06-13T22:59:34Z"
mac: ENC[AES256_GCM,data:pyayAQOBIBKwfpTCykHtVELGKmhrpS9Mu18wwl3aYyvEwdqqhfSbzt2fXURgWAbrsax6KzrTfi2bgixy8NxRibI+o5/magGAXdk0N5RUP68/FPe1cSL6ZRry+00WjJp8x75wbSp64GU0xY7uUuq+oUKfckGCsY/m4AODbZWU1Ic=,iv:jEpnTyllRd46vPiGG2VlZkFOgwcKQNSov1W813uLQEM=,tag:B7BNlVvhgm9HI/zUQneVQw==,type:str] mac: ENC[AES256_GCM,data:72E73xauS1Xrfw6tcyN/PHSJZ4ZZnIeKp8JVUPFGPBvIzaD6ZThYZwQ10FDD4JF+YOwn3QhCEh3t0ozcSNNnJFkyBgSqFtRMkym0ede12VAOPu2wQFoNvMdkT7+n14lJ/9OOz6KDyMf0BQDJKlSfDBkt+mLi61zte5iUxPsWsp4=,iv:xuOwFBEnlRgbaVdMq4O6w9T2edpS6uEPh9yhNbYBJIk=,tag:Y+dtcU17Q83o/9Nt1LGCcg==,type:str]
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.13.1 version: 3.13.1
+1 -21
View File
@@ -22,34 +22,14 @@ in
key = "${varDir}/secrets/intermediate_ca_key"; key = "${varDir}/secrets/intermediate_ca_key";
# address = "0.0.0.0:9000"; # address = "0.0.0.0:9000";
dnsNames = [ dnsNames = [
"*.zeroq.su" "ca.zeroq.su"
"*.home.arpa"
"localhost"
]; ];
db = { db = {
type = "badgerv2"; type = "badgerv2";
dataSource = "${varDir}/db"; dataSource = "${varDir}/db";
}; };
authority = { authority = {
claims = {
defaultTLSCertDuration = "2160h";
maxTLSCertDuration = "2160h";
};
provisioners = [ provisioners = [
{
type = "ACME";
name = "acme";
claims = {
enableSSHCA = false;
allowSANs = [
"*.home.arpa"
"*.zeroq.su"
"home.arpa"
"localhost"
];
maxTLSCertDuration = "2160h";
};
}
{ {
type = "JWK"; type = "JWK";
name = "oqyude@zeroq.su"; name = "oqyude@zeroq.su";
+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;
};
};
}
+6 -1
View File
@@ -4,13 +4,18 @@
inputs, inputs,
... ...
}: }:
let
master = import inputs.nixpkgs-master {
system = "x86_64-linux";
};
in
{ {
services.syncthing = { services.syncthing = {
enable = true; enable = true;
# package = master.syncthing; # package = master.syncthing;
systemService = true; systemService = true;
guiAddress = "0.0.0.0:8384"; guiAddress = "0.0.0.0:8384";
configDir = "${xlib.dirs.storage}/persist/Syncthing/${xlib.device.hostname}"; configDir = "${xlib.dirs.storage}/Syncthing/${xlib.device.hostname}";
dataDir = "${xlib.dirs.server-home}"; dataDir = "${xlib.dirs.server-home}";
group = "users"; group = "users";
user = "${xlib.device.username}"; user = "${xlib.device.username}";
+12
View File
@@ -0,0 +1,12 @@
{
config,
lib,
pkgs,
xlib,
...
}:
{
environment.systemPackages = [
pkgs.aichat
];
}
+24
View File
@@ -7,8 +7,31 @@
... ...
}: }:
let 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 = pkgs.python314.withPackages ( beetsEnv = pkgs.python314.withPackages (
ps: with ps; [ ps: with ps; [
# et-xmlfile
# exceptiongroup
# markdown-it-py
# mdurl
# munkres
# musicbrainzngs
# openpyxl
# pygments
# rich
# sniffio
anyio anyio
beautifulsoup4 beautifulsoup4
beetcamp beetcamp
@@ -45,6 +68,7 @@ let
requests requests
requests-ratelimiter requests-ratelimiter
scipy scipy
# setuptools
six six
socksio socksio
soupsieve soupsieve
+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 = [ ];
# };
}
+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;
}
-95
View File
@@ -1,95 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
sshdDir = "${config.user.home}/sshd";
sshdTmpDir = "${config.user.home}/sshd-tmp";
port = 8022;
serviceDir = "${config.user.home}/service";
# runit run-scripts (executable store paths, linked into ~/service).
sshdRun = pkgs.writeScriptBin "sshd-run" ''
#!${pkgs.runtimeShell}
exec ${pkgs.openssh}/bin/sshd -f /etc/ssh/sshd_config -D
'';
svLogRun = pkgs.writeScriptBin "sv-log-run" ''
#!${pkgs.runtimeShell}
mkdir -p ./main
exec ${pkgs.runit}/bin/svlogd -tt ./main
'';
svStart = pkgs.writeScriptBin "sv-start" ''
#!${pkgs.runtimeShell}
exec ${pkgs.runit}/bin/runsvdir ${serviceDir}
'';
in
{
# Minimal sshd server for LAN access (e.g. `ssh epral` from other hosts).
# nix-on-droid has no systemd: sshd is started manually via `sshd-start`
# (or from Termux:Boot / a session). The host key is generated once on the
# first activation and kept in ~/sshd (NOT /etc — it is rebuilt on every
# activation).
environment.etc."ssh/sshd_config".text = ''
HostKey ${sshdDir}/ssh_host_ed25519_key
Port ${toString port}
PasswordAuthentication no
AllowUsers ${config.user.userName}
'';
# Generate the host key on first activation (idempotent).
build.activation.sshd = ''
if [[ ! -d "${sshdDir}" ]]; then
$DRY_RUN_CMD rm -rf "${sshdTmpDir}"
$DRY_RUN_CMD mkdir -p "${sshdTmpDir}"
$VERBOSE_ECHO "Generating sshd host key..."
$DRY_RUN_CMD ${pkgs.openssh}/bin/ssh-keygen -t ed25519 -f "${sshdTmpDir}/ssh_host_ed25519_key" -N ""
$DRY_RUN_CMD mv "${sshdTmpDir}" "${sshdDir}"
fi
'';
# nix-on-droid's session-init adds ~/.nix-defexpr/channels to NIX_PATH
# unconditionally; nix warns about the missing dir on every invocation.
# Making it exist silences the warning. Must be done in activation (not
# home-manager): ~/.nix-defexpr/channels is a symlink into
# ~/.local/state/nix/profiles/channels (dangling until it exists), which
# home-manager cannot link into. mkdir -p refuses to traverse a dangling
# symlink, so create the real target dir instead.
build.activation.nixdefexpr = ''
$DRY_RUN_CMD mkdir -p "${config.user.home}/.local/state/nix/profiles/channels/nixpkgs"
$DRY_RUN_CMD touch "${config.user.home}/.local/state/nix/profiles/channels/nixpkgs/.keep"
'';
# runit service tree: ~/service/<name>/{run,log/run}. run/ and log/run are
# symlinks into the nix store (read-only is fine; runsvdir writes only to
# the <name>/supervise dirs). /etc/service is symlinked for `sv status`.
# NOTE: tailscaled was removed — nixpkgs' linux build cannot run inside
# proot (SELinux blocks netlink; needs GOOS=android or root). Re-add only
# if that gets solved.
build.activation.services = ''
$DRY_RUN_CMD rm -rf ${serviceDir}/tailscaled
$DRY_RUN_CMD mkdir -p ${serviceDir}/sshd/log
$DRY_RUN_CMD ln -sfn ${sshdRun}/bin/sshd-run ${serviceDir}/sshd/run
$DRY_RUN_CMD ln -sfn ${svLogRun}/bin/sv-log-run ${serviceDir}/sshd/log/run
$DRY_RUN_CMD ln -sfn ${serviceDir} /etc/service
'';
environment.packages = [
pkgs.runit
# one command brings up all supervised services (sshd, ...)
svStart
# manual fallback for sshd only
(pkgs.writeScriptBin "sshd-start" ''
#!${pkgs.runtimeShell}
exec ${pkgs.openssh}/bin/sshd -f /etc/ssh/sshd_config -D "$@"
'')
# termux-battery-status, termux-notification, termux-clipboard-*, ...
# Needs the Termux:API Android app (com.termux.api, from F-Droid) as the
# actual backend; see termux-api.nix.
(pkgs.callPackage ./termux-api.nix { })
];
}
-64
View File
@@ -1,64 +0,0 @@
# termux-api — C binary + scripts that talk to the Termux:API Android app.
#
# The Android app (com.termux.api, installed separately from F-Droid) is the
# actual backend: `termux-api-broadcast` sends an `am broadcast` intent to
# com.termux.api/.TermuxApiReceiver and pipes stdout/stdin over abstract unix
# sockets. The nix side only provides the CLI entry points:
# termux-battery-status, termux-notification, termux-clipboard-*,
# termux-toast, termux-share, termux-dialog, ...
#
# Adaptations for nix-on-droid (upstream assumes termux's /data prefix):
# - `am` is resolved from PATH (provided by android-integration.am)
# - scripts' shebang rewritten from the substituted `#!$out/bin/sh`
# - termux-callback referenced by absolute store path
{
stdenv,
fetchFromGitHub,
cmake,
runtimeShell,
lib,
}:
stdenv.mkDerivation rec {
pname = "termux-api";
version = "0.59.1";
src = fetchFromGitHub {
owner = "termux";
repo = "termux-api-package";
rev = "v${version}";
sha256 = "1pkdjxll9x9arrifppl7y37dmni5fi4jng2wfx0dgbgriyjrhxl7";
};
nativeBuildInputs = [ cmake ];
# CMakeLists.txt declares cmake_minimum_required(VERSION 3.0.0), but modern
# CMake refuses to configure with < 3.5. Bump the floor via policy override.
cmakeFlags = [ "-DCMAKE_POLICY_VERSION_MINIMUM=3.5" ];
# termux-api.c hardcodes PREFIX for `am` and `termux-callback`. On
# nix-on-droid `am` comes from android-integration.am (termux-am) via PATH;
# termux-callback lives in our own libexec dir.
patchPhase = ''
substituteInPlace termux-api.c \
--replace 'execv(PREFIX "/bin/am", child_argv);' 'execvp("am", child_argv);' \
--replace 'execl(PREFIX "/libexec/termux-callback", "termux-callback", NULL);' 'execl("${placeholder "out"}/libexec/termux-callback", "termux-callback", NULL);' \
--replace 'execl(PREFIX "/libexec/termux-callback", "termux-callback", fds, NULL);' 'execl("${placeholder "out"}/libexec/termux-callback", "termux-callback", fds, NULL);'
'';
# CMake substitutes @TERMUX_PREFIX@ (= CMAKE_INSTALL_PREFIX = $out) into the
# scripts' shebang, producing `#!$out/bin/sh` which does not exist. Rewrite
# all shebangs to the nix runtime shell.
postInstall = ''
for f in $out/bin/termux-* $out/libexec/termux-callback; do
sed -i "1s|^#!.*|#!${runtimeShell}|" "$f"
done
'';
meta = {
description = "Termux API-RPC and companion package to launch API commands";
homepage = "https://github.com/termux/termux-api-package";
license = lib.licenses.asl20;
platforms = lib.platforms.linux;
};
}
+22 -1
View File
@@ -6,6 +6,10 @@
... ...
}: }:
{ {
#imports = [
# ./others
#];
xlib.device.username = "oqyude"; xlib.device.username = "oqyude";
users = { users = {
@@ -36,6 +40,10 @@
}; };
}; };
#systemd.tmpfiles.rules = [
# "z /home/shared 2775 root users -"
#];
sops = { sops = {
age = { age = {
sshKeyPaths = [ sshKeyPaths = [
@@ -84,7 +92,7 @@
ssh_key_public_root = { ssh_key_public_root = {
format = "yaml"; format = "yaml";
key = "ssh_key_public"; key = "ssh_key_public";
path = "/root/.ssh/id_ed25519.pub"; path = "/root/.ssh/id_ed25519";
owner = "root"; owner = "root";
group = "root"; group = "root";
mode = "0655"; mode = "0655";
@@ -98,5 +106,18 @@
}; };
}; };
# 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; # fileSystems."/etc/ssh".neededForBoot = true;
} }
-6
View File
@@ -7,14 +7,8 @@
../containers/3x-ui.nix ../containers/3x-ui.nix
./nginx.nix ./nginx.nix
./samba.nix ./samba.nix
./systemd.nix
# ./glances.nix # ./glances.nix
# ./netbird.nix # ./netbird.nix
# ./xray.nix # ./xray.nix
]; ];
systemd.tmpfiles.rules = [
"d /mnt 0755 root root -"
"d /mnt/services 0755 root root -"
"d /mnt/services/containers 0755 root root -"
];
} }
+186 -2
View File
@@ -8,6 +8,7 @@ let
server = "100.64.0.0"; server = "100.64.0.0";
in in
{ {
# environment.etc."nginx/pubray".text = inputs.zeroq-credentials.services.xray.auth;
users.users.nginx.extraGroups = [ "acme" ]; users.users.nginx.extraGroups = [ "acme" ];
services = { services = {
nginx = { nginx = {
@@ -16,7 +17,22 @@ in
recommendedOptimisation = true; recommendedOptimisation = true;
recommendedProxySettings = true; recommendedProxySettings = true;
recommendedTlsSettings = true; recommendedTlsSettings = true;
# appendHttpConfig = inputs.zeroq-credentials.services.xray.maps;
virtualHosts = { virtualHosts = {
# "pubray.zeroq.su" = {
# 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.su" = { "x.zeroq.su" = {
forceSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
@@ -33,13 +49,181 @@ in
proxyPass = "http://localhost:2096"; proxyPass = "http://localhost:2096";
proxyWebsockets = true; proxyWebsockets = true;
}; };
"/clash/" = { };
proxyPass = "http://localhost:2096"; };
"kuma.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:4001";
proxyWebsockets = true; proxyWebsockets = true;
}; };
}; };
"health.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:19999";
proxyWebsockets = true;
}; };
}; };
"git.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:3000";
proxyWebsockets = true;
};
};
# "agent.zeroq.su" = {
# forceSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://${server}:3000";
# proxyWebsockets = true;
# };
# };
# "node-red.zeroq.su" = {
# forceSSL = true;
# enableACME = true;
# kTLS = true;
# locations."/" = {
# proxyPass = "http://${server}:1880";
# proxyWebsockets = true;
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
"zeroq.su" = {
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.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:6061";
proxyWebsockets = true;
};
};
"n8n.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:5678";
proxyWebsockets = true;
};
};
"office.zeroq.su" = {
enableACME = true;
forceSSL = true;
locations = {
"/" = {
proxyPass = "http://${server}:8090";
proxyWebsockets = true;
};
};
# extraConfig = ''
# client_max_body_size 5G;
# proxy_http_version 1.1;
# proxy_buffering off;
# proxy_set_header Host $host;
# proxy_set_header X-Forwarded-Host $host;
# 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;
# proxy_set_header Authorization $http_authorization;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# ''; # absolute_redirect off;
};
"immich.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:2283";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 5G;
'';
};
"nextcloud.zeroq.su" = {
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.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:8083";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 5G;
'';
};
"pdf.zeroq.su" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://${server}:8446";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 5G;
'';
};
# "ai.zeroq.su" = {
# forceSSL = true;
# enableACME = true;
# locations."/" = {
# proxyPass = "http://${server}:11112";
# proxyWebsockets = true;
# };
# extraConfig = ''
# client_max_body_size 5G;
# '';
# };
};
}; };
}; };
security.acme = { security.acme = {
-94
View File
@@ -1,94 +0,0 @@
{
config,
lib,
pkgs,
xlib,
...
}:
let
serviceName = "rsync-services-sync";
serverAddress = "oqyude@100.64.0.0";
serverDir = "${xlib.dirs.services-nodes-folder}/${xlib.device.hostname}";
nodeDir = "${xlib.dirs.services-mnt-folder}";
in
{
systemd = {
services = {
"${serviceName}" = {
description = "Bidirectional rsync";
unitConfig.RequiresMountsFor = [ ];
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
script = ''
set -euo pipefail
RSYNC="${pkgs.rsync}/bin/rsync"
SSH="${pkgs.openssh}/bin/ssh"
SSH_CMD="$SSH \
-o BatchMode=yes \
-o ConnectTimeout=5 \
-o StrictHostKeyChecking=no"
echo "Waiting for server..."
for i in $(seq 1 60); do
echo "Attempt $i"
if $SSH_CMD ${serverAddress} true >/dev/null 2>&1; then
echo "Server available"
break
fi
sleep 5
done
# final check
$SSH_CMD ${serverAddress} true >/dev/null 2>&1
mkdir -p "${nodeDir}"
if [ ! -d "${nodeDir}" ] || [ -z "$(ls -A "${nodeDir}")" ]; then
echo "Pull <- ${serverAddress}"
mkdir -p "${nodeDir}"
$RSYNC \
-e "$SSH_CMD" \
-a \
"${serverAddress}:${serverDir}/" \
"${nodeDir}/"
else
echo "Push -> ${serverAddress}"
$RSYNC \
-e "$SSH_CMD" \
-a \
--delete \
"${nodeDir}/" \
"${serverAddress}:${serverDir}/"
fi
'';
serviceConfig = {
Type = "oneshot";
User = "root";
Group = "root";
Nice = 10;
CPUQuota = "5%";
IOSchedulingClass = "idle";
};
};
};
timers = {
"${serviceName}" = {
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "daily";
Persistent = true;
Unit = "${serviceName}.service";
};
};
};
};
}
+3 -2
View File
@@ -6,10 +6,11 @@
}: }:
{ {
imports = [ imports = [
../software/aichat.nix
../software/beets ../software/beets
../software/whisper.nix
./containers ./containers
./nix-serve.nix ./tools
# ./tools
#../server/open-webui.nix #../server/open-webui.nix
#../services/tts.nix #../services/tts.nix
]; ];
-25
View File
@@ -1,25 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
services = {
nix-serve = {
enable = true;
package = pkgs.nix-serve-ng;
openFirewall = true;
port = 5000;
bindAddress = "0.0.0.0";
secretKeyFile = config.sops.secrets.private-key.path;
};
};
sops.secrets = {
private-key = {
key = "private-key";
sopsFile = ./secrets/nix-serve.yaml;
mode = "0600";
};
};
}
-16
View File
@@ -1,16 +0,0 @@
private-key: ENC[AES256_GCM,data:VTj1cmhYLbBuUnIgtXI3CZtULaNZ5XOpoheJB0gUwrWrH5B0rmxcvZLlJWX7xhGs4oqcC3Wwmo+TBPhcgGylLVdCuhJG5A94UwOa9ZIV4s3x3IJ4RU3UcHTsA0xdtw7XxBfryw==,iv:8oZCojIU0JXWJgE5t+fNNW9trC109yOJp1UGAV76FbU=,tag:S74cHFy9B8C29npdcoVBeg==,type:str]
sops:
age:
- recipient: age13l2gtk0nzr484zprp7e0pkrt0ne0j4asyn2pjmlaw73nte7t7d8q4sqtxm
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6MHBkYzZneEdhUlN5MEpx
NGxud1BkVU1NUFdyVFE2VDJWb1M2cW9IcUVFCm9QZ3RvNHFaeWpFbnZ3Q1dKSDdn
RHQvUDgrZHRiUHpSR3FrWXRkQUxXWGMKLS0tIERsemNuL1BwR2xYYUpmbVFROWtN
RGI1WlRGMzlkS2tqQ0JPSFJHTUY1TUkKDeaivc+ST8MYtnJEDx07Y+IhtpvblR47
SLZf6WKQ8WNY4Bb5VeMWiCABPP/2L+VwoACqkOdZ01yGUVQSc9X6tw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-05-03T17:05:41Z"
mac: ENC[AES256_GCM,data:6jNp7N7lIvsLez3zQbDKTWPyvkL8u9g34I3q27GudgXzYw8B3Pb26jc9dCYCxCylCZxN5IeWWyHvUt4PadQABI4jrrIKnIfVV1A2c+A90chu+xSyE/B9OhkSC7yYVOnCURJPYku8799RIRkpHAWeKawkydbOiszCiC3qIKZDSTQ=,iv:xXivLDNnTABlNeWOOWsCESDUOnFv+9Lh0o029r7rk+A=,tag:vUoIZjcNtE3xJX/jNCao7Q==,type:str]
unencrypted_suffix: _unencrypted
version: 3.12.2