add seadrive

This commit is contained in:
Dmitriy Kholkin 2023-03-14 22:53:29 +03:00
parent 9e530e27e5
commit 6c1b8a727d
5 changed files with 118 additions and 67 deletions

View File

@ -2,48 +2,91 @@
with lib; with lib;
let let
cfg = config.services.seadrive; cfg = config.services.seadrive;
settingsFormat = pkgs.formats.ini { }; format = pkgs.formats.ini { };
seadriveConf = if (cfg.settingsFile != null) then
cfg.settingsFile settings = {
else account = {
settingsFormat.generate "seadrive.conf" cfg.settings; server = cfg.settings.server;
username = cfg.settings.username;
token = "#token#";
is_pro = cfg.settings.isPro;
};
general = {
client_name = cfg.settings.clientName;
};
cache = {
size_limit = cfg.settings.sizeLimit;
clean_cache_interval = cfg.settings.cleanCacheInterval;
};
};
configFile = format.generate "seadrive.conf" settings;
startScript = pkgs.writeShellScript "start-seadrive" ''
token=$(head -n1 ${cfg.settings.tokenFile})
cp -f ${configFile} ${cfg.stateDir}/seadrive.conf
sed -e "s,#token#,$token,g" -i "${cfg.stateDir}/seadrive.conf"
chmod 440 "${cfg.stateDir}/seadrive.conf"
mkdir -p ${cfg.mountPoint} || true
${cfg.package}/bin/seadrive -c ${cfg.stateDir}/seadrive.conf -f -d ${cfg.stateDir}/data -l ${cfg.stateDir}/logs ${cfg.mountPoint}
'';
in { in {
###### Interface
options.services.seadrive = { options.services.seadrive = {
enable = mkEnableOption "Seadrive"; enable = mkEnableOption "Seadrive";
settings = mkOption { settings = mkOption {
type = types.submodule { default = { };
freeformType = settingsFormat.type; description = lib.mdDoc ''
};
default = {
account = {
server = "";
username = "";
token = "";
is_pro = false;
};
general = {
client_name = "nixos";
};
cache = {
size_limit = "10GB";
clean_cache_interval = 10;
};
};
description = ''
Configuration for Seadrive.
''; '';
};
settingsFile = mkOption { type = types.submodule {
default = null; freeformType = format.type;
type = types.nullOr types.path;
options = {
server = mkOption {
type = types.str;
default = "";
description = lib.mdDoc "";
};
username = mkOption {
type = types.str;
default = "";
description = lib.mdDoc "";
};
tokenFile = mkOption {
type = types.str;
default = "";
description = lib.mdDoc "";
};
isPro = mkOption {
type = types.bool;
default = false;
description = lib.mdDoc "";
};
clientName = mkOption {
type = types.str;
default = config.networking.hostName;
description = lib.mdDoc "";
};
sizeLimit = mkOption {
type = types.str;
default = "10GB";
description = lib.mdDoc "";
};
cleanCacheInterval = mkOption {
type = types.int;
default = 10;
description = lib.mdDoc "";
};
};
};
}; };
package = mkOption { package = mkOption {
type = types.package; type = types.package;
description = "Which package to use for the seadrive."; description = lib.mdDoc "Which package to use for the seadrive.";
default = pkgs.seadrive-fuse; default = pkgs.seadrive-fuse;
defaultText = literalExpression "pkgs.seadrive-fuse"; defaultText = literalExpression "pkgs.seadrive-fuse";
}; };
@ -51,25 +94,22 @@ in {
mountPoint = mkOption { mountPoint = mkOption {
type = types.str; type = types.str;
default = "/media/seadrive"; default = "/media/seadrive";
description = lib.mdDoc "";
};
stateDir = mkOption {
type = types.str;
default = "~/.seadrive";
description = lib.mdDoc "";
}; };
}; };
###### Implementation config = mkIf cfg.enable {
systemd.user.services.seadrive = rec {
config.home-manager.users.${config.mainuser} = mkIf cfg.enable { serviceConfig.ExecStart = startScript;
systemd.user.services.seadrive-daemon = { after = [ "network-online.target" ];
Service = { wants = after;
Type = "simple"; wantedBy = [ "default.target" ];
# Restart = "always";
ExecStart = ''
${cfg.package}/bin/seadrive -c ${seadriveConf} -f -d %h/.seadrive/data ${cfg.mountPoint}
'';
};
Unit = rec {
After = [ "network-online.target" ];
Wants = After;
};
Install.WantedBy = [ "multi-user.target" ];
}; };
}; };
} }

View File

@ -32,13 +32,12 @@ with lib; {
reshade-shaders = pkgs.callPackage ./packages/reshade-shaders.nix { }; reshade-shaders = pkgs.callPackage ./packages/reshade-shaders.nix { };
rosepine-gtk-theme = pkgs.callPackage ./packages/rosepine-gtk-theme.nix { }; rosepine-gtk-theme = pkgs.callPackage ./packages/rosepine-gtk-theme.nix { };
rosepine-icon-theme = pkgs.callPackage ./packages/rosepine-icon-theme.nix { }; rosepine-icon-theme = pkgs.callPackage ./packages/rosepine-icon-theme.nix { };
# seadrive-fuse = pkgs.callPackage ./packages/seadrive-fuse.nix { };
tidal-dl = pkgs.callPackage ./packages/tidal-dl.nix { }; tidal-dl = pkgs.callPackage ./packages/tidal-dl.nix { };
tokyonight-gtk-theme = pkgs.callPackage ./packages/tokyonight-gtk-theme.nix { }; tokyonight-gtk-theme = pkgs.callPackage ./packages/tokyonight-gtk-theme.nix { };
tokyonight-icon-theme = pkgs.callPackage ./packages/tokyonight-icon-theme.nix { }; tokyonight-icon-theme = pkgs.callPackage ./packages/tokyonight-icon-theme.nix { };
xonar-fp = pkgs.callPackage ./packages/xonar-fp.nix { }; xonar-fp = pkgs.callPackage ./packages/xonar-fp.nix { };
youtube-to-mpv = pkgs.callPackage ./packages/youtube-to-mpv.nix { term = config.defaultApplications.term.cmd; }; youtube-to-mpv = pkgs.callPackage ./packages/youtube-to-mpv.nix { term = config.defaultApplications.term.cmd; };
vivaldi = master.vivaldi; seadrive-fuse = pkgs.callPackage ./packages/seadrive-fuse.nix { };
steam = master.steam.override { steam = master.steam.override {
withJava = true; withJava = true;
extraPkgs = pkgs: with pkgs; [ mono libkrb5 keyutils ]; extraPkgs = pkgs: with pkgs; [ mono libkrb5 keyutils ];

View File

@ -1,13 +1,10 @@
{ fetchFromGitHub { fetchFromGitHub
, pkg-config , pkgconfig
, stdenv , stdenv
, autoreconfHook , autoreconfHook
, lib , lib
# Package dependencies
, libsearpc , libsearpc
, libselinux
, libuuid , libuuid
, pcre
, libtool , libtool
, libevent , libevent
, sqlite , sqlite
@ -17,31 +14,27 @@
, intltool , intltool
, jansson , jansson
, curl , curl
, python , python3
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "seadrive-fuse"; pname = "seadrive-fuse";
version = "2.0.16"; version = "2.0.22";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "haiwen"; owner = "haiwen";
repo = pname; repo = pname;
rev = "v${version}"; rev = "v${version}";
sha256 = "072sx4wvj3gbslv3hn4sifr28fy812b8aja9d7phl1w4yix9l55z"; hash = "sha256-zzUg3ukV3bf0X+LYDmDgB6TXfDx388q4RvVCAnKzauE=";
}; };
patches = [];
nativeBuildInputs = [ nativeBuildInputs = [
autoreconfHook autoreconfHook
pkg-config pkgconfig
]; ];
buildInputs = [ buildInputs = [
libsearpc libsearpc
libselinux libuuid
libuuid # Satisfies the 'mount' package requirement. Contains 'mount.pc'
pcre
libtool libtool
libevent libevent
sqlite sqlite
@ -51,14 +44,14 @@ stdenv.mkDerivation rec {
intltool intltool
jansson jansson
curl curl
python python3
]; ];
meta = with lib; { meta = with lib; {
homepage = "https://github.com/haiwen/seadrive-fuse"; homepage = https://github.com/haiwen/seadrive-fuse;
description = "SeaDrive daemon with FUSE interface"; description = "SeaDrive daemon with FUSE interface";
license = licenses.gpl3; license = licenses.gpl3;
platforms = platforms.all; platforms = platforms.all;
maintainers = with maintainers; []; maintainers = with maintainers; [];
}; };
} }

View File

@ -0,0 +1,19 @@
{ config, pkgs, lib, ... }: {
# secrets.seadrive.owner = config.mainuser;
secrets.seadrive-token.owner = config.mainuser;
services.seadrive = {
enable = true;
mountPoint = "/media/seadrive";
stateDir = "~/.config/seadrive";
settings = {
server = "https://file.ataraxiadev.com";
username = "ataraxiadev@ataraxiadev.com";
tokenFile = config.secrets.seadrive-token.decrypted;
isPro = false;
clientName = config.networking.hostName;
sizeLimit = "4GB";
cleanCacheInterval = 10;
};
};
persist.state.homeDirectories = [ ".config/seadrive" ];
}

View File

@ -3,7 +3,8 @@
./base.nix ./base.nix
inputs.base16.hmModule inputs.base16.hmModule
# seadrive inputs.self.customModules.seadrive
inputs.self.nixosProfiles.seadrive
xray xray
applications-setup applications-setup
@ -18,7 +19,6 @@
corectrl corectrl
firefox firefox
gamemode gamemode
google-drive
himalaya himalaya
kitty kitty
mangohud mangohud