diff options
| author | Tim Keller <tjk@tjkeller.xyz> | 2026-07-08 16:40:50 -0500 |
|---|---|---|
| committer | Tim Keller <tjk@tjkeller.xyz> | 2026-07-08 16:40:50 -0500 |
| commit | 4ee40b64e3121f5b7d7c13c6d115d7f970da4dfb (patch) | |
| tree | 7f2fdf05493595cb94dd29b99b50f968994d433c /hm-module.nix | |
| download | open-bamboo-network-plugin-flake-4ee40b64e3121f5b7d7c13c6d115d7f970da4dfb.tar.xz open-bamboo-network-plugin-flake-4ee40b64e3121f5b7d7c13c6d115d7f970da4dfb.zip | |
initial commit
Diffstat (limited to 'hm-module.nix')
| -rw-r--r-- | hm-module.nix | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/hm-module.nix b/hm-module.nix new file mode 100644 index 0000000..d3fa652 --- /dev/null +++ b/hm-module.nix @@ -0,0 +1,86 @@ +self: +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.programs.openBambooNetworking; + + mkClientPlugin = + clientType: obnVersion: pkgs.callPackage (self + "/package.nix") { inherit clientType obnVersion; }; + + # home.file targets are relative to $HOME; configDir is given as an + # absolute path (so it composes naturally whether it comes from + # config.xdg.configHome, a Flatpak path, or something else entirely). + relToHome = + path: + if lib.hasPrefix (config.home.homeDirectory + "/") path then + lib.removePrefix (config.home.homeDirectory + "/") path + else + throw "programs.openBambooNetworking: configDir (${path}) must be under $HOME (${config.home.homeDirectory})"; + + orcaPlugin = mkClientPlugin "orca_slicer" cfg.orcaSlicer.obnVersion; +in +{ + options.programs.openBambooNetworking = { + enable = mkEnableOption '' + open-bamboo-networking (https://github.com/ClusterM/open-bamboo-networking), + an open-source replacement for Bambu Lab slicers' proprietary network + plugin, built from source + ''; + + # Each supported client gets its own nested option group. Only + # orcaSlicer is wired up today; add siblings here (e.g. bambuStudio) + # as upstream support for them matures. + orcaSlicer = { + enable = mkOption { + type = types.bool; + default = true; + description = "Build and link the plugin for OrcaSlicer (or a compatible fork)."; + }; + + obnVersion = mkOption { + type = types.str; + default = "02.03.00.99"; + description = '' + Plugin ABI version baked into the built filename. Must match what + the slicer expects: check with + jq -r '.app.network_plugin_version // "not set"' <configDir>/OrcaSlicer.conf + First three components should match what the app reports; the + last component should stay .99 (see README). + ''; + }; + + configDir = mkOption { + type = types.str; + default = "${config.xdg.configHome}/OrcaSlicer"; + defaultText = literalExpression ''"''${config.xdg.configHome}/OrcaSlicer"''; + description = '' + Directory containing OrcaSlicer.conf and its plugins/ subfolder. + Override this if you're on a fork with a different config + directory (e.g. ~/.config/BambuStudio, ~/.config/OrcaSlicer-Nightly), + or a Flatpak install (e.g. ~/.var/app/io.github.softfever.OrcaSlicer/config/OrcaSlicer). + Must be a path under $HOME. + ''; + }; + }; + }; + + config = mkIf cfg.enable (mkMerge [ + (mkIf cfg.orcaSlicer.enable { + home.packages = [ orcaPlugin ]; + + home.file = { + "${relToHome cfg.orcaSlicer.configDir}/plugins/libbambu_networking_${cfg.orcaSlicer.obnVersion}.so".source = + "${orcaPlugin}/plugins/libbambu_networking_${cfg.orcaSlicer.obnVersion}.so"; + "${relToHome cfg.orcaSlicer.configDir}/plugins/libBambuSource.so".source = + "${orcaPlugin}/plugins/libBambuSource.so"; + }; + }) + ]); +} |
