This document collects some support that is shared between Arroyo NixOS Generator and Arroyo Home Manager . It sets up the nixpkgs overlay, the injection of a custom Nix packages in to the Arroyo systems' nixpkgs pkgs attrset, etc.
Making arroyo-nix an importable repository of my own packages
So Arroyo dumps the tangled Nix files in to ~/arroyo-nix/:
I have a handful of packages I want to export and include here. I have been trying to maintain a branch of nixpkgs containing my changes but it's been awfully difficult to keep it up to date and i haven't had the mental wherewithal to clean the changes up enough to merge in to nixpkgs.
nix source: :tangle ~/arroyo-nix/default.nix :noweb yes{ pkgs ? import <nixpkgs> {} }: with pkgs; rec { # The `lib`, `modules`, and `overlay` names are special lib = import ./lib { inherit pkgs; }; # functions # modules = import ./modules; # NixOS modules # overlays = import ./overlays; # nixpkgs overlays overlays = [ (import ./overlay.nix) ]; <<gen-pkg-overlays(rix-pkgs)>> drawingbot-premium = (drawingbot-free.override { name = "drawingbotv3-premium"; }).overrideAttrs (old: old // { src = /home/rrix/sync/DrawingBotV3-Premium-1.6.9-beta-linux.deb; meta.license = pkgs.lib.licenses.unfree; }); # plasma5Packages = let # p5pcc = pkgs.plasma5Packages.overrideScope (pFinal: pPrev: rec { # stdenv = pkgs.ccacheStdenv; # }); # in # pkgs.plasma5Packages.overrideScope (plasmaFinal: plasmaPrev: rec { # kwin = p5pcc.kwin.overrideAttrs (old: { # src = /home/rrix/Code/kwin; # }); # }); karousel = plasma5Packages.callPackage ./pkgs/karousel.nix {}; karess = plasma5Packages.callPackage ./pkgs/karess.nix {}; kwin-effects-forceblur = kdePackages.callPackage ./pkgs/kwin-effects-forceblur.nix {}; } // { <<gen-pkg-overlays(wrapWine-pkgs)>> } // (with python3Packages; rec { <<gen-python-overlays(python-pkgs)>> vpypePackages = callPackage ./pkgs/vpype/default.nix { inherit pnoise; inherit svgelements; inherit qasync; inherit watchfiles; inherit hnswlib; }; vpype = vpypePackages.vpype; vsketch = vpypePackages.vsketch; })
| NixGL | nixGL | ./pkgs/nixgl.nix | | Arroyo customized Emacs package | myEmacs | ./pkgs/emacs.nix | | Arroyo customized Emacs package | arroyo-emacs | ./pkgs/emacs.nix | | =cpmtools= on NixOS | cpmtools | ./pkgs/cpmtools.nix | | DrawingBot V3 on NixOS | drawingbot-free | ./pkgs/drawingbot.nix | | Mopidy Bandcamp | mopidy-bandcamp | ./pkgs/mopidy-bandcamp.nix | | RiverWM -ultitile | river-ultitile | ./pkgs/river-ultitile.nix | | Wau for River Init | wau | ./pkgs/wau.nix |
| Cogmind | cogmind | ./pkgs/cogmind.nix | | Caves of Qud | cavesofqud | ./pkgs/cavesofqud.nix | | Sid Meier's Alpha Centauri | smac | ./pkgs/smac.nix | | Google Earth Pro | google-earth-pro | ./pkgs/google-earth-pro.nix |
| Morph Command Wrapper | morph-wrapper | /home/rrix/org/morph-wrapper/default.nix | Module | | The Arcology Project | arcology | /home/rrix/org/arcology-django/default.nix | Module | | Feediverse | feediverse | ./pkgs/feediverse.nix | Module | | Matrix Feedbot | matrix-feedbot | ./pkgs/feedbot.nix | Module | | Inaturalist to Sqlite | inaturalist-to-sqlite | ./pkgs/inaturalist-to-sqlite.nix | Module | | Twitter to Sqlite | twitter-to-sqlite | ./pkgs/twitter-to-sqlite.nix | Module | | Waydroid Passthrough Browser | passthroughbrowser | ./pkgs/passthroughbrowser.nix | Module | | =jisho-api= Python nixpkgs | jisho-api | ./pkgs/jisho-api.nix | Module | | beetcamp | beetcamp | ./pkgs/beetcamp.nix | Application | | bandcamp-dl | bandcamp-dl | ./pkgs/bandcamp-dl.nix | Application | | vsketch and vpype deps | pnoise | ./pkgs/pnoise.nix | Module | | vsketch and vpype deps | qasync | ./pkgs/qasync.nix | Module | | vsketch and vpype deps | svgelements | ./pkgs/svgelements.nix | Module | | vsketch and vpype deps | hnswlib | ./pkgs/hnswlib.nix | Module | | Meshtastic metrics exporter | meshtastic-metrics-exporter | ./pkgs/meshtastic-metrics-exporter.nix | Application |
nixpkgs configuration needs to be passed in when the module is instantiated, doing it in your config isn't supported. This import is used as <arroyo/pkgs/nixpkgs.nix> by e.g. the Morph Command Wrapper , flakes will have to do this on their own still:
nix source: :tangle ~/arroyo-nix/pkgs/nixpkgs.nix{ ... }: import <nixpkgs> { allowUnfree = true; permittedInsecurePackages = [ "olm-3.2.16" ]; }
Literate Programming Helpers
These turn the tables above in to code embedded above that:
gen-pkg-overlaysemacs-lisp source: :var tbl=wrapWine-pkgs(mapconcat (lambda (row) (format "%s = callPackage %s {};\n" (second row) (third row))) tbl)
gen-python-overlaysemacs-lisp source: :var tbl=python-pkgs(mapconcat (lambda (row) (format "%s = toPython%s (callPackage %s {});\n" (second row) (fourth row) (third row))) tbl)
Arroyo Nix Library Helpers
Arroyo exposes some library helpers which i would like to not just bare-import:
nix source: :tangle ~/arroyo-nix/lib/default.nix{ pkgs }: with pkgs.lib; { pkgVersions = pkgs.callPackage ../versions.nix {}; mkKwriteConfig5 = pkgs.callPackage ./kde-configs.nix {}; mkNixGLWrapper = pkgs.callPackage ./nixgl.nix {}; mkActivationLocalLink = pkgs.callPackage ./mk_activation_local_link.nix {}; publicKeys = import ./public-keys.nix; }
Arroyo NixOS loads this as an overlay
Since arroyo is in my =NIX_PATH= , i can just import it. home-manager is configured to use the system nixpkgs.
nix source: :tangle ~/arroyo-nix/nixos/rixpkgs.nix{ pkgs, ... }: { nixpkgs.overlays = [ (import <arroyo/overlay.nix>) ]; }
Arroyo-Nix could be used as an nixpkgs overlay, this exposes all the stuff in default.nix as a nixpkgs overlay.
nix source: :tangle ~/arroyo-nix/overlay.nixself: super: let isReserved = n: n == "lib" || n == "overlays" || n == "modules"; nameValuePair = n: v: { name = n; value = v; }; nurAttrs = import ./default.nix { pkgs = super; }; outAttrs = builtins.listToAttrs (map (n: nameValuePair n nurAttrs.${n}) (builtins.filter (n: !isReserved n) (builtins.attrNames nurAttrs))) // { lib = (super.lib or {}) // (import ./lib/default.nix { pkgs = super; }); }; in outAttrs
NEXT figure all this out -- probably have flake generation as well here.
NEXT probably need an arroyo-db keyword to note which packages go in default.nix...
and probably one for lib... uagh.