add seadrive
This commit is contained in:
parent
9e530e27e5
commit
6c1b8a727d
@ -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" ];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -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 ];
|
||||||
|
@ -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; [];
|
||||||
};
|
};
|
||||||
}
|
}
|
19
profiles/workspace/seadrive.nix
Normal file
19
profiles/workspace/seadrive.nix
Normal 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" ];
|
||||||
|
}
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user