From 4b1323a69df488e4024ea0aec55da2e4d5bbd732 Mon Sep 17 00:00:00 2001 From: oqyude Date: Sat, 17 May 2025 17:31:53 +0300 Subject: [PATCH] 123 --- devices/laptop.nix | 1 - home/main.nix | 8 ++--- modules/essentials/users.nix | 2 +- modules/software/beets.nix | 58 +++++++++++++++++++++++++++++++++--- modules/zeroq/flake.nix | 1 + 5 files changed, 60 insertions(+), 10 deletions(-) diff --git a/devices/laptop.nix b/devices/laptop.nix index 03042e0..561f9c0 100755 --- a/devices/laptop.nix +++ b/devices/laptop.nix @@ -20,7 +20,6 @@ let nixos-hardware.nixosModules.asus-fa506ic self.nixosModules.software.wine - self.nixosModules.software.beets self.nixosModules.desktop self.homeConfigurations.main.nixosModule self.homeConfigurations.root.nixosModule diff --git a/home/main.nix b/home/main.nix index 1b266c5..364f84d 100755 --- a/home/main.nix +++ b/home/main.nix @@ -59,10 +59,10 @@ let source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.therima-drive}"; target = "External"; }; - "Music" = { - source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.vetymae-drive}/Users/User/Music"; - target = "Music"; - }; +# "Music" = { +# source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.vetymae-drive}/Users/User/Music"; +# target = "Music"; +# }; "Pictures" = { source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.vetymae-drive}/Users/User/Pictures"; target = "Pictures"; diff --git a/modules/essentials/users.nix b/modules/essentials/users.nix index b3a4524..eaafd14 100644 --- a/modules/essentials/users.nix +++ b/modules/essentials/users.nix @@ -10,6 +10,7 @@ description = "Jor Oqyude"; initialPassword = "1234"; extraGroups = [ + "beets" "audio" "disk" "gamemode" @@ -18,7 +19,6 @@ "pipewire" "qemu-libvirtd" "wheel" - "beets" ]; }; }; diff --git a/modules/software/beets.nix b/modules/software/beets.nix index eeaeb88..1bb0cd6 100644 --- a/modules/software/beets.nix +++ b/modules/software/beets.nix @@ -1,3 +1,4 @@ +# WIP, Garbage { inputs, ... }@flakeContext: { config, @@ -5,17 +6,66 @@ pkgs, ... }: +let + base-packages = with pkgs; [ + python312 + python312Packages.pip + python312Packages.virtualenv + ]; + # Файл requirements.txt с перечислением плагинов + requirements = pkgs.writeText "beets-requirements.txt" '' + beets[bandcamp,deezer,discogs,duplicates,edit,embedart,fetchart,info,lastgenre,lyrics,missing,rewrite,scrub,smartplaylist,spotify] + beetcamp + typing_extensions + ''; +in { + + fileSystems."/mnt/beets/music" = { + device = "${inputs.zeroq.dirs.music-library}"; + options = [ "bind" ]; + }; + users = { + groups = { + beets = {}; + }; users = { beets = { + isSystemUser = true; #isNormalUser = true; description = "beets service"; - #initialPassword = "1234"; - extraGroups = [ - "beets" - ]; + group = "beets"; + homeMode = "0770"; + home = "/var/lib/beets"; + packages = base-packages; + shell = pkgs.bashInteractive; }; }; }; + + systemd.tmpfiles.rules = [ + "d /var/lib/beets 0770 beets beets -" + "d /mnt/beets 0770 beets beets -" + ]; + + # Автоматическая установка плагинов при старте системы + system.activationScripts.beets-venv = '' + # Создаём virtualenv если не существует + if [ ! -d "/var/lib/beets/venv" ]; then + ${pkgs.sudo}/bin/sudo -u beets ${pkgs.python312}/bin/python -m venv /var/lib/beets/venv + fi + + # Обновляем pip и устанавливаем зависимости + ${pkgs.sudo}/bin/sudo -u beets /var/lib/beets/venv/bin/pip install --upgrade pip wheel + ${pkgs.sudo}/bin/sudo -u beets /var/lib/beets/venv/bin/pip install -r ${requirements} + ''; + + # Симлинк для удобного вызова beets из-под основного пользователя +# environment.systemPackages = [ +# (pkgs.writeScriptBin "beets" '' +# #!/bin/sh +# exec sudo -u beets /var/lib/beets/venv/bin/beets "$@" +# '') +# ]; } diff --git a/modules/zeroq/flake.nix b/modules/zeroq/flake.nix index 29d8019..7057448 100755 --- a/modules/zeroq/flake.nix +++ b/modules/zeroq/flake.nix @@ -34,6 +34,7 @@ server-home = "/home/${devices.admin}/External"; storage = "${server-home}/Storage"; calibre-library = "${server-home}/Books-Library"; + music-library = "${dirs.user-home}/Music"; }; };