# TODO ## UI * fzf/pick * scrapers for web-based search engines (especially for "files in packages") ## Options * Proper option/command parser * Verbose mode (prints `run` commands) ## DSL * Call commands from within other commands, or specify dependencies (eg: command "install", "pkg install", depends: "update" ) * DSL setting defaults (eg: cache_dir "~/.cache/upm") * Some commands require special packages (eg: "command 'locate', depends: 'pkgfile'") which have their own syncable databases |_ offer to install these dependencies (and sync them (periodically)) |_ web-based search is even nicer * Page multi-commands (eg: 'args.each { run ..., paged: true }' should all output to the same pager) |_ 'run ..., pager: IO'? will that break grep? ## Performance * RPi2 is very clunky |_ rewrite in... C? rust? go? lua? ## Custom help for command eg: command "something", help: "does stuff", root: true do ... end ## Pipes and filters * `Tool::DSL#run` is currently somewhat awkward; it would be simpler if returned an `Enumerator`, which could then be filtered (ie: highlight/grep), or concatenated to other `Enumerator`s. ## Streaming pipes with colours * Make the `run` command able to grep the output while streaming the results to the screen. * Make run pretend to be a tty, so I don't need `--color=always`. * Use spawn, like so: ``` r,w = IO.pipe spawn(*%w[echo hello world], out: w) spawn(*%w[tr a-z A-Z], in: r) ``` ## More package managers Currently missing: * RedHat/Fedora/CentOS * OSX * FreeBSD * OpenBSD * SuSE ## Dependency-fetching features * Use upm to fetch dependencies for any library or script, across any language. * Some kind of manifest file (or personifest, to be politically correct) * This is a little like bundler, npm, etc., but for any type of package. ## Ability to install any package from any OS to the user's home directory Slurps up the packages and their dependencies, then unpacks them into ~/.upm/{bin,lib} or something. (Like nix?) Related tool: intoli/exodus ## fzf Use fzf for "list" output (or other commands that require selecting, like "remove") ## Commandline argument parser * Add options to commands: * upm upgrade --download-only * upm install --help * upm help install ## Figure out how to integrate language package managers * The packages that you can get through gem/pip/luarocks/etc. are often duplicated in the OS-level package managers. Should there be a preference? * Should the search command show matches from all available package tools? (There could be a configure step where the user says which package managers should be included, and which have preference) * Possibilites: * upm install --ruby * upm install ruby:, * upm --ruby search * upm ruby:search * upm search os: * Separate tool: `lpm search ` searches only language packages * Add detectors for language-specific package-managers * Help screen needs to display language-specific package managers * `upm help --ruby` should show available ruby commands ## Give identical output on every platform * Requires parsing the output of every command into a canonical format, or reading the package databases directly. ## apt: Integrate 'acs' wrapper script ## Evaluate UPM::Tool.new block in an instance of an anonymous subclass of UPM::Tool This will allow tools to create classes and modules inside the UPM::Tool block without namespace collisions ## Themes? Why not! ## Mirror Selector Do a ping test on available mirrors, and use fzf to select. ## Interrupt catcher Don't print backtrace when ^C is pressed. ## Tests Create fake OS environments that you can chroot into and run upm to test it out. # DONE ## Abbrev cmds * eg: upm install => upm i => u i