nixpkgs/pkgs/applications/editors/jetbrains
Artturin e0464e4788 treewide: replace stdenv.is with stdenv.hostPlatform.is
In preparation for the deprecation of `stdenv.isX`.

These shorthands are not conducive to cross-compilation because they
hide the platforms.

Darwin might get cross-compilation for which the continued usage of `stdenv.isDarwin` will get in the way

One example of why this is bad and especially affects compiler packages
https://www.github.com/NixOS/nixpkgs/pull/343059

There are too many files to go through manually but a treewide should
get users thinking when they see a `hostPlatform.isX` in a place where it
doesn't make sense.

```
fd --type f "\.nix" | xargs sd --fixed-strings "stdenv.is" "stdenv.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "stdenv'.is" "stdenv'.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "clangStdenv.is" "clangStdenv.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "gccStdenv.is" "gccStdenv.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "stdenvNoCC.is" "stdenvNoCC.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "inherit (stdenv) is" "inherit (stdenv.hostPlatform) is"
fd --type f "\.nix" | xargs sd --fixed-strings "buildStdenv.is" "buildStdenv.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "effectiveStdenv.is" "effectiveStdenv.hostPlatform.is"
fd --type f "\.nix" | xargs sd --fixed-strings "originalStdenv.is" "originalStdenv.hostPlatform.is"
```
2024-09-25 00:04:37 +03:00
..
bin jetbrains: 2024.1 EAP -> 2024.2.2 2024-09-20 06:46:09 -06:00
patches jetbrains.{idea,pycharm}-community-src: 2023.3.2 -> 2024.1.3 2024-06-21 20:39:02 +08:00
plugins treewide: replace stdenv.is with stdenv.hostPlatform.is 2024-09-25 00:04:37 +03:00
source treewide: use src.name in sourceRoot 2024-08-02 14:56:50 +02:00
default.nix treewide: replace stdenv.is with stdenv.hostPlatform.is 2024-09-25 00:04:37 +03:00
readme.md jetbrains.{idea,pycharm}-community-src: 2023.2.2 -> 2023.3.2 2024-01-17 16:32:20 +08:00

This directory contains the build expressions needed to build any of the jetbrains IDEs. The jdk is in pkgs/development/compilers/jetbrains-jdk. To test the build process of every IDE (as well as the process for adding plugins), build jetbrains.plugins.tests.default.

How to use plugins:

  • Get the ide you want and call jetbrains.plugins.addPlugins with a list of plugins you want to add.
  • The list of plugins can be a list of ids or names (as in plugins/plugins.json)
  • Example: jetbrains.plugins.addPlugins jetbrains.pycharm-professional [ "nixidea" ]
  • The list can also contain a drv giving a .jar or .zip (this is how you use a plugin not added to nixpkgs)

How to add a new plugin to nixpkgs

How to update stuff:

  • Run ./bin/update_bin.py
  • This will update binary IDEs and plugins, and automatically commit them
  • Source builds need a bit more effort, as they aren't automated at the moment:
    • Find the build of the stable release you want to target (usually different for pycharm and idea, should have three components)
    • I find this at https://jetbrains.com/updates/updates.xml (search for product name=", then fullNumber)
    • Update the buildVer field in source/default.nix
    • Empty the ideaHash, androidHash, jpsHash and restarterHash (only ideaHash and restarterHash changes on a regular basis) fields and try to build to get the new hashes
    • Run nix build .#jetbrains.(idea/pycharm)-community-src.src.src, then ./source/build_maven.py source/idea_maven_artefacts.json result/
    • Update source/brokenPlugins.json (from https://plugins.jetbrains.com/files/brokenPlugins.json)
    • Do a test build
    • If it succeeds, make a PR/merge
    • If it fails, ping/message GenericNerdyUsername

How to add an IDE:

  • Make dummy entries in bin/versions.json (make sure to set the version to something older than the real one)
  • Run bin/update_bin.py
  • Add an entry in bin/ides.json
  • Add an entry in default.nix

TODO:

  • move/copy plugin docs to nixpkgs manual
  • replace libxcrypt-legacy with libxcrypt when supported
  • make jetbrains-remote-dev.patch cleaner
  • is extraLdPath needed for IDEA?
  • set meta.sourceProvenance for everything
  • from source builds:
    • remove timestamps in output .jar of jps-bootstrap
    • automated update scripts
    • fetch .jar s from stuff built in nixpkgs when available
      • what stuff built in nixpkgs provides .jars we care about?
        • kotlin
    • make configurePhase respect $NIX_BUILD_CORES
    • make the subdir of the resulting tar.gz always have a release number (2023.2.2) instead of a build number (232.9921.89)
  • jdk:
    • build on darwin
    • use chromium stuff built by nixpkgs for jcef?
    • make buildPhase respect $NIX_BUILD_CORES
    • automated update script?
  • on aarch64-linux:
    • test plugins
    • from source build
    • see if build (binary or source) works without expat
  • on x86_64-darwin:
    • test plugins
    • from source build
  • on aarch64-darwin:
    • test plugins
    • from source build