Commit Graph

71 Commits

Author SHA1 Message Date
Charles Strahan
b6c06e216b ruby: new bundler infrastructure
This improves our Bundler integration (i.e. `bundlerEnv`).

Before describing the implementation differences, I'd like to point a
breaking change: buildRubyGem now expects `gemName` and `version` as
arguments, rather than a `name` attribute in the form of
"<gem-name>-<version>".

Now for the differences in implementation.

The previous implementation installed all gems at once in a single
derivation. This was made possible by using a set of monkey-patches to
prevent Bundler from downloading gems impurely, and to help Bundler
find and activate all required gems prior to installation. This had
several downsides:

* The patches were really hard to understand, and required subtle
  interaction with the rest of the build environment.
* A single install failure would cause the entire derivation to fail.

The new implementation takes a different approach: we install gems into
separate derivations, and then present Bundler with a symlink forest
thereof. This has a couple benefits over the existing approach:

* Fewer patches are required, with less interplay with the rest of the
  build environment.
* Changes to one gem no longer cause a rebuild of the entire dependency
  graph.
* Builds take 20% less time (using gitlab as a reference).

It's unfortunate that we still have to muck with Bundler's internals,
though it's unavoidable with the way that Bundler is currently designed.
There are a number improvements that could be made in Bundler that would
simplify our packaging story:

* Bundler requires all installed gems reside within the same prefix
  (GEM_HOME), unlike RubyGems which allows for multiple prefixes to
  be specified through GEM_PATH. It would be ideal if Bundler allowed
  for packages to be installed and sourced from multiple prefixes.
* Bundler installs git sources very differently from how RubyGems
  installs gem packages, and, unlike RubyGems, it doesn't provide a
  public interface (CLI or programmatic) to guide the installation of a
  single gem. We are presented with the options of either
  reimplementing a considerable portion Bundler, or patch and use parts
  of its internals; I choose the latter. Ideally, there would be a way
  to install gems from git sources in a manner similar to how we drive
  `gem` to install gem packages.
* When a bundled program is executed (via `bundle exec` or a
  binstub that does `require 'bundler/setup'`), the setup process reads
  the Gemfile.lock, activates the dependencies, re-serializes the lock
  file it read earlier, and then attempts to overwrite the Gemfile.lock
  if the contents aren't bit-identical. I think the reasoning is that
  by merely running an application with a newer version of Bundler, you'll
  automatically keep the Gemfile.lock up-to-date with any changes in the
  format. Unfortunately, that doesn't play well with any form of
  packaging, because bundler will immediately cause the application to
  abort when it attempts to write to the read-only Gemfile.lock in the
  store. We work around this by normalizing the Gemfile.lock with the
  version of Bundler that we'll use at runtime before we copy it into
  the store. This feels fragile, but it's the best we can do without
  changes upstream, or resorting to more delicate hacks.

With all of the challenges in using Bundler, one might wonder why we
can't just cut Bundler out of the picture and use RubyGems. After all,
Nix provides most of the isolation that Bundler is used for anyway.

The problem, however, is that almost every Rails application calls
`Bundler::require` at startup (by way of the default project templates).
Because bundler will then, by default, `require` each gem listed in the
Gemfile, Rails applications are almost always written such that none of
the source files explicitly require their dependencies. That leaves us
with two options: support and use Bundler, or maintain massive patches
for every Rails application that we package.

Closes #8612
2015-12-29 09:30:21 -05:00
aszlig
662ab05119
beets: Add the external beets-alternatives plugin
It's not included in upstream beets but are linked in the documentation
under "Other plugins", see:

http://beets.readthedocs.org/en/v1.3.15/plugins/index.html#other-plugins

I found this one particularly useful for syncing files to varios media
players that refuse to read my FLAC files properly.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2015-12-18 05:58:27 +01:00
aszlig
68c504fa8f
beets: Use bs1770gain by default for replaygain
After trying with a dozen files, it seems the bs1770gain backend is much
more reliable than the audiotools backend and especially does a better
job (well, compared to audiotools which either does doing nothing at all
or throws an exception) when used on alboms that contain different
sample rates/sizes.

Additionally, we already had a few issues regarding the audiotools
backend, even to the extent that @sampsyco almost wanted to drop it
upstream (see sampsyco/beets#1342).

Also related issues are #10376 and sampsyo/beets#1592.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2015-12-18 05:58:27 +01:00
Emery Hemingway
2b6dcdfcd0 Rename 'emery' maintainer handle to 'ehmry', fixes #11493
Communication happens on Github so names should be consistent.
2015-12-05 23:06:20 +01:00
aszlig
f864ef703e
beets: Add dependencies for "badfiles" plugin.
I have to admit that I did very poor testing in d7307d8 and didn't
notice that the "badfiles" plugin relies on mp3val (thanks to @devhell
for packaging in 6e1ef13) and flac to be actually useful.

We now patch in the store locations of these binaries and make
"badfiles" an optional dependency (though enabled by default).

Now, I have tested "beet bad" on my whole music collection and it worked
fine (well, it has found errors... but that's what it is for).

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2015-10-26 10:26:48 +01:00
aszlig
d7307d8e80
beets: 1.3.14 -> 1.3.15
Introduces a new plugin called "badfiles", which helps to scan for
corruption within the music collection. I've added this to
pluginsWithoutDeps and sorted the list.

Full upstream changelog can be found here:

https://github.com/sampsyo/beets/releases/tag/v1.3.15

This fixes #10376 via sampsyo/beets@225ba28.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2015-10-25 18:39:46 +01:00
Franz Pletz
ed13d23c97 darkice: Fix build with opus and vorbis support
The configure script requires libogg in both the paths of libopus and
libvorbis. Because is isn't true for the libopus and libvorbis
derivations in NixOS and patching the configure script is a bit tedious,
a temporary environment with libogg, libvorbis & libopus is used.
2015-10-23 14:09:50 +02:00
Vladimír Čunát
1f73d482d6 beets: fix tarball evaluation by asserting isLinux
/cc #10069.
2015-09-26 09:29:49 +02:00
Vladimír Čunát
21e3ff658a x11: replace its usage by xlibsWrapper directly
Scilab note: the parameters already had pointed to nonexistent dirs
before this set of refactoring. But that config wasn't even used by
default.
2015-09-15 12:08:24 +02:00
koral
d3723b300e beets: 1.3.13 -> 1.3.14 2015-08-30 18:34:10 +00:00
William A. Kennington III
7297255019 Convert all jack references to libjack2 2015-06-27 00:17:52 -07:00
Arseniy Seroka
70b5e51456 Merge pull request #8178 from jagajaga/fix/versions
fix: add missing versions
2015-06-06 00:22:10 +03:00
Arseniy Seroka
daf4ec39a5 fix: add missing versions 2015-06-04 23:34:14 +03:00
codyopel
dd6946dcbb beets: 1.3.11 -> 1.3.13 2015-05-31 23:51:04 -04:00
William A. Kennington III
b07929b0a3 Use libpulseaudio instead of pulseaudio 2015-05-29 14:32:56 -07:00
lethalman
af4d6468b2 Merge pull request #7959 from ikervagyok/darkice
New Package: Darkice
2015-05-27 10:51:59 +02:00
Lengyel Balázs
aa1ce46281 Inital commit for Darkice 2015-05-26 15:20:53 +02:00
Michael Alan Dorman
1a4c952422 And now try fetchFromGitHub 2015-05-25 17:13:37 -04:00
Michael Alan Dorman
e81c6bd654 Use fetchzip to retrieve new pasystray. 2015-05-25 17:13:37 -04:00
Michael Alan Dorman
bc1b8cb33a Update pasystray to current version. 2015-05-25 17:13:37 -04:00
Michael Alan Dorman
fb655dce4c Fix SHA for pasystray.
I presume there's something about how github creates the .zip files such
that they can change SHA.

Please note: this is a very outdated version of pasystray---I don't know
if that's intentional, but perhaps a better strategy would be to update
it wholesale.
2015-05-25 17:13:37 -04:00
Peter Jones
05a6c34e04 New package: mpDris2, MPRIS 2 support for mpd 2015-05-20 15:37:25 -06:00
Arseniy Seroka
b28d29ba0b fix missing argument 2015-05-19 21:09:34 +03:00
Luca Bruno
9adde87fea More usage of gnome3.defaultIconTheme 2015-05-19 14:44:27 +02:00
aszlig
17ea86d947
beet: Remove unnecessary "LANG = null".
We're passing glibcLocales to the tests directly, so we don't pollute
the builder's environment anyway, so no reason to override anything
there.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2015-04-14 09:45:18 +02:00
aszlig
642b8ae658
boots: Sort expression strings/attributes.
I know, I know, this is me being ultra-nazi about those things, but
beets is about OCDing your music collection, so why not apply this to
the Nix expressions as well?

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2015-04-14 09:45:18 +02:00
Peter Jones
b836ab365b
beets: Update to new upstream version 1.3.11
Adds glibcLocales as a dependency so that the unit tests with UTF-8
strings will work correctly.
2015-04-14 09:45:17 +02:00
Eelco Dolstra
2ed5c2bd6b Set some meta.platforms
Also fix meta.platform -> meta.platforms in a few places.
2015-03-20 20:04:42 +01:00
Bob van der Linden
6ef241d8e2 volumeicon: upgrade to 0.5.1 2015-03-03 00:16:12 +01:00
aszlig
863581a35b
beets: Update to new upstream version 1.3.10.
We can now finally drop the mediafile and test fix patches, because they
were already coming from the upstream repository and are now included in
the release.

Also, this release brings two new plugins:

 * permissions: Fix permissions on music files as they are imported.
 * plexupdate: Notify a Plex server when the database changes.

The echonest_tempo plugin has finally been removed and so we can drop it
entirely. No plugin as of now tries to do interactive prompts on "beet
config" anymore, so we can test *all* plugins and without providing
dummy options.

The full list of changes can be found here:

https://github.com/sampsyo/beets/releases/tag/v1.3.10

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2015-01-22 10:33:48 +01:00
Charles Strahan
8d49e87dec Merge pull request #4677 from cstrahan/pleasant-ruby
Pleasant ruby
2015-01-21 23:27:38 -05:00
Charles Strahan
034488ec80 ruby: fixup mpdcron 2015-01-21 22:38:29 -05:00
Emery Hemingway
e563ada091 dir2opus: initial package at 0.12.1 2015-01-21 09:49:20 -05:00
Charles Strahan
dfc225d143 Merge branch 'master' of github.com:nixos/nixpkgs into pleasant-ruby
Conflicts:
	pkgs/applications/version-management/git-and-tools/default.nix
	pkgs/applications/version-management/git-and-tools/hub/default.nix
	pkgs/tools/audio/mpdcron/default.nix
2015-01-20 20:21:03 -05:00
Jan Malakhovski
e4859ddd95 qastools: add version 0.18.1 2015-01-07 15:43:01 +00:00
aszlig
a6673133ef
beets: Add patch for fixing bucket tests.
See, that's why I hate the gregorian calendar and new years eve: People
tend to celebrate things that are absolutely irrelevant, like this
comment.

The test however assumed that either beets or its test suite would never
survive 2015, so this test should assure it won't survive in >= 2015 :-)

Anyway, the patch is from upstream master, so we can drop it once 1.3.10
is released.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2015-01-04 16:41:52 +01:00
Peter Simons
8235e8c544 Switch users of 'pandoc' to the lean version. 2015-01-02 14:56:24 +01:00
Charles Strahan
94dd4b9721 ruby: WIP 2014-12-30 21:05:00 -05:00
aszlig
05f6061d1d
beets: Check dependencies on activated plugins.
Beets tries to load oll activated plugins on "beet config -e" (however
only on the second run, thus the dummy), so we just pass all activated
plugins into a generated config file and bail out on any errors.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2014-12-30 23:13:56 +01:00
aszlig
740da53c72
beets: Check plugin definitions against package.
The reason for doing this is in order to not forget about possible
dependencies in new upstream releases, so if upstream is introducing a
new plugin where we're lacking dependencies, the build will fail on our
side and we can check whether we'll need those.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2014-12-30 23:11:57 +01:00
aszlig
f2364772b8
beets: Use audiotools backend for replaygain.
Using commands such as mp3gain and aacgain is only the default for
backwards-compatible reasons. However, on Nix(OS), we would have to
either patch those tools into beets or rely on an impurity, so let's
depend on audiotools and also default to that backend.

Of course, there is also a GStreamer backend, but it comes with a hell
of additional dependencies (which not only cover audio files), which is
why I decided against defaulting to GStreamer and package audiotools
instead (in eecd932).

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2014-12-30 23:06:28 +01:00
aszlig
2acc258dff
beets: Allow to configure plugin dependencies.
This also fleshes out/fixes the unit tests, which I've used for
gathering the individual requirements.

Along various Python dependencies we now also have a build-time
dependency on bashInteractive and a runtime dependency on
bashCompletion, which is needed for command line completion to work
correctly.

However, some tests for the shell completion fail at the moment, so I've
disabled them for now.

The patch for fixing mediafile codec info is a modified version of
sampsyo/beets@903e88a, where I just dropped the second hunk modifying
the changelog. It is already merged to master and thus expected to be in
the next upstream version.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2014-12-30 23:05:22 +01:00
aszlig
d84ea8aea7
beets: Switch to using fetchFromGitHub.
The reason for doing this is because the package on PyPI is missing some
files needed for running the test suite (for example:
test/test_completion.sh).

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2014-12-30 22:46:22 +01:00
aszlig
814a0519fe
beets: Add myself to maintainers.
Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2014-12-30 03:31:27 +01:00
aszlig
de29819b03
beets: Update to new upstream version 1.3.9.
Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2014-12-30 03:29:16 +01:00
aszlig
d6874d6063
beets: Move into its own package directory.
The primary use of beets is not as a Python library and users usually
would expect to install it into the env using "nix-env -i beets" rather
than "nix-env -i pythonX.Y-beets".

Having beets in its own package directory also allows for better
customization, where we're going to implement attributes that can be
used to turn on/off various features and plugins.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2014-12-30 03:23:37 +01:00
Charles Strahan
145733c479 Merge branch 'master' of github.com:nixos/nixpkgs into pleasant-ruby
Conflicts:
	pkgs/applications/version-management/redmine/default.nix
	pkgs/development/interpreters/ruby/gem.nix
	pkgs/development/interpreters/ruby/generated.nix
	pkgs/development/interpreters/ruby/patches.nix
	pkgs/development/tools/vagrant/default.nix
	pkgs/servers/consul/default.nix
2014-12-28 14:29:52 -05:00
Richard Wallace
b00f6cde88 wrap pasystray to provide XDG_DATA_DIRS so tray icon displays correctly 2014-12-06 15:50:26 -07:00
Emery Hemingway
c1f458eb85 initial liquidsoap package expression 2014-11-20 17:34:14 -05:00
Pascal Wittmann
8df0e0b151 Fixed many descriptions 2014-11-11 14:36:34 +01:00