about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--base-module.nix15
-rw-r--r--default.nix25
-rw-r--r--humblebundle/default.nix32
-rw-r--r--humblebundle/fetch-humble-bundle/default.nix26
4 files changed, 69 insertions, 29 deletions
diff --git a/base-module.nix b/base-module.nix
new file mode 100644
index 00000000..08855379
--- /dev/null
+++ b/base-module.nix
@@ -0,0 +1,15 @@
+{ lib, ... }:
+
+with lib;
+
+{
+  options = {
+    packages = mkOption {
+      type = types.attrsOf types.unspecified;
+      default = {};
+      description = "Available NixGames packages.";
+    };
+  };
+
+  config._module.args.pkgs = import <nixpkgs> {};
+}
diff --git a/default.nix b/default.nix
new file mode 100644
index 00000000..80420a8b
--- /dev/null
+++ b/default.nix
@@ -0,0 +1,25 @@
+{ configuration ? null }:
+
+let
+  configFilePath = let
+    xdgConfig = builtins.getEnv "XDG_CONFIG_HOME";
+    fallback = "${builtins.getEnv "HOME"}/.config";
+    basedir = if xdgConfig == "" then fallback else xdgConfig;
+  in "${basedir}/nixgames.nix";
+
+  configFile = if !builtins.pathExists configFilePath then throw ''
+    The config file "${configFilePath}" doesn't exist! Be sure to create it and
+    put your HumbleBundle email address and password in it, like this:
+
+    {
+      humblebundle.email = "fancyuser@example.com";
+      humblebundle.password = "my_super_secret_password";
+    }
+  '' else configFilePath;
+
+in ((import <nixpkgs/lib>).evalModules {
+  modules = [
+    (if configuration == null then configFilePath else configuration)
+    ./base-module.nix ./humblebundle
+  ];
+}).config.packages
diff --git a/humblebundle/default.nix b/humblebundle/default.nix
index 6e733603..953f3481 100644
--- a/humblebundle/default.nix
+++ b/humblebundle/default.nix
@@ -1,13 +1,13 @@
-{ email ? null, password ? null }:
-
-with import <nixpkgs> {};
+{ config, lib, pkgs, ... }:
 
 let
+  cfg = config.humblebundle;
+
   self = rec {
     callPackage = pkgs.lib.callPackageWith (pkgs // self);
 
     fetchHumbleBundle = callPackage ./fetch-humble-bundle {
-      inherit email password;
+      inherit (config.humblebundle) email password;
     };
 
     bastion = callPackage ./bastion.nix {};
@@ -21,4 +21,26 @@ let
     spaz = callPackage ./spaz.nix {};
     swordsandsoldiers = callPackage ./swordsandsoldiers.nix {};
   };
-in self
+in with lib; {
+  options.humblebundle = {
+    email = mkOption {
+      type = types.nullOr types.str;
+      default = null;
+      description = ''
+        Email address for your HumbleBundle account.
+      '';
+    };
+
+    password = mkOption {
+      type = types.nullOr types.str;
+      default = null;
+      description = ''
+        Password for your HumbleBundle account.
+      '';
+    };
+  };
+
+  config.packages = {
+    humblebundle = mkIf (cfg.email != null && cfg.password != null) self;
+  };
+}
diff --git a/humblebundle/fetch-humble-bundle/default.nix b/humblebundle/fetch-humble-bundle/default.nix
index b045d689..fb29cae6 100644
--- a/humblebundle/fetch-humble-bundle/default.nix
+++ b/humblebundle/fetch-humble-bundle/default.nix
@@ -1,7 +1,7 @@
 { stdenv, curl, cacert, writeText, fetchFromGitHub, fetchpatch
 , python, buildPythonPackage, pythonPackages
 
-, email ? null, password ? null
+, email, password
 }:
 
 { machineName, downloadName ? "Download", suffix ? "humblebundle", md5 }: let
@@ -21,28 +21,6 @@
     propagatedBuildInputs = with pythonPackages; [ requests2 ];
   };
 
-  configFilePath = let
-    xdgConfig = builtins.getEnv "XDG_CONFIG_HOME";
-    fallback = "${builtins.getEnv "HOME"}/.config";
-    basedir = if xdgConfig == "" then fallback else xdgConfig;
-  in "${basedir}/nixgames.nix";
-
-  configFile = if !builtins.pathExists configFilePath then throw ''
-    The config file "${configFilePath}" doesn't exist! Be sure to create it and
-    put your HumbleBundle email address and password in it, like this:
-
-    {
-      humblebundle.email = "fancyuser@example.com";
-      humblebundle.password = "my_super_secret_password";
-    }
-  '' else configFilePath;
-
-  credentials = if email != null && password != null then {
-    inherit email password;
-  } else {
-    inherit ((import configFile).humblebundle) email password;
-  };
-
   getDownloadURL = writeText "gethburl.py" ''
     import sys, humblebundle
 
@@ -72,7 +50,7 @@
           raise SystemExit(1)
 
     hb = humblebundle.HumbleApi()
-    hb.login('${credentials.email}', '${credentials.password}')
+    hb.login('${email}', '${password}')
     products = dict(get_products(hb))
     dstruct = find_download(products)