Skip to content

Commit da0379a

Browse files
authored
jetbrains: pycharm/idea unified builds; deprecate writerside & aqua (#466331)
2 parents 5f26b2c + 2843a9a commit da0379a

File tree

11 files changed

+212
-129
lines changed

11 files changed

+212
-129
lines changed

pkgs/applications/editors/jetbrains/bin/versions.json

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
"url": "https://download.jetbrains.com/idea/ideaIC-2025.2.5.tar.gz",
5757
"build_number": "252.28238.7"
5858
},
59-
"idea-ultimate": {
59+
"idea": {
6060
"update-channel": "IntelliJ IDEA RELEASE",
6161
"url-template": "https://download.jetbrains.com/idea/ideaIU-{version}.tar.gz",
6262
"version": "2025.2.5",
@@ -89,12 +89,12 @@
8989
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.5.tar.gz",
9090
"build_number": "252.28238.29"
9191
},
92-
"pycharm-professional": {
92+
"pycharm": {
9393
"update-channel": "PyCharm RELEASE",
94-
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}.tar.gz",
94+
"url-template": "https://download.jetbrains.com/python/pycharm-{version}.tar.gz",
9595
"version": "2025.2.5",
9696
"sha256": "b1e47419e5844c38e7a7a9be9e5260c75cea6aa8423f2584dc1727f792d5feb4",
97-
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.5.tar.gz",
97+
"url": "https://download.jetbrains.com/python/pycharm-2025.2.5.tar.gz",
9898
"build_number": "252.28238.29"
9999
},
100100
"rider": {
@@ -195,7 +195,7 @@
195195
"url": "https://download.jetbrains.com/idea/ideaIC-2025.2.5-aarch64.tar.gz",
196196
"build_number": "252.28238.7"
197197
},
198-
"idea-ultimate": {
198+
"idea": {
199199
"update-channel": "IntelliJ IDEA RELEASE",
200200
"url-template": "https://download.jetbrains.com/idea/ideaIU-{version}-aarch64.tar.gz",
201201
"version": "2025.2.5",
@@ -228,12 +228,12 @@
228228
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.5-aarch64.tar.gz",
229229
"build_number": "252.28238.29"
230230
},
231-
"pycharm-professional": {
231+
"pycharm": {
232232
"update-channel": "PyCharm RELEASE",
233-
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}-aarch64.tar.gz",
233+
"url-template": "https://download.jetbrains.com/python/pycharm-{version}-aarch64.tar.gz",
234234
"version": "2025.2.5",
235235
"sha256": "7037672c6913f643ec4979ca5f16791588e001ffd39f830d874587f79e358be2",
236-
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.5-aarch64.tar.gz",
236+
"url": "https://download.jetbrains.com/python/pycharm-2025.2.5-aarch64.tar.gz",
237237
"build_number": "252.28238.29"
238238
},
239239
"rider": {
@@ -334,7 +334,7 @@
334334
"url": "https://download.jetbrains.com/idea/ideaIC-2025.2.5.dmg",
335335
"build_number": "252.28238.7"
336336
},
337-
"idea-ultimate": {
337+
"idea": {
338338
"update-channel": "IntelliJ IDEA RELEASE",
339339
"url-template": "https://download.jetbrains.com/idea/ideaIU-{version}.dmg",
340340
"version": "2025.2.5",
@@ -367,12 +367,12 @@
367367
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.5.dmg",
368368
"build_number": "252.28238.29"
369369
},
370-
"pycharm-professional": {
370+
"pycharm": {
371371
"update-channel": "PyCharm RELEASE",
372-
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}.dmg",
372+
"url-template": "https://download.jetbrains.com/python/pycharm-{version}.dmg",
373373
"version": "2025.2.5",
374374
"sha256": "00eccdeb39bd8eeaed1b98ad99f542fbc3851389f9e7d19355d05dfd979eb669",
375-
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.5.dmg",
375+
"url": "https://download.jetbrains.com/python/pycharm-2025.2.5.dmg",
376376
"build_number": "252.28238.29"
377377
},
378378
"rider": {
@@ -473,7 +473,7 @@
473473
"url": "https://download.jetbrains.com/idea/ideaIC-2025.2.5-aarch64.dmg",
474474
"build_number": "252.28238.7"
475475
},
476-
"idea-ultimate": {
476+
"idea": {
477477
"update-channel": "IntelliJ IDEA RELEASE",
478478
"url-template": "https://download.jetbrains.com/idea/ideaIU-{version}-aarch64.dmg",
479479
"version": "2025.2.5",
@@ -506,12 +506,12 @@
506506
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.5-aarch64.dmg",
507507
"build_number": "252.28238.29"
508508
},
509-
"pycharm-professional": {
509+
"pycharm": {
510510
"update-channel": "PyCharm RELEASE",
511-
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}-aarch64.dmg",
511+
"url-template": "https://download.jetbrains.com/python/pycharm-{version}-aarch64.dmg",
512512
"version": "2025.2.5",
513513
"sha256": "71da1283259bc59897e5bb43c6c3771a72d026419ed4d79192889ea3885ac0de",
514-
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.5-aarch64.dmg",
514+
"url": "https://download.jetbrains.com/python/pycharm-2025.2.5-aarch64.dmg",
515515
"build_number": "252.28238.29"
516516
},
517517
"rider": {

pkgs/applications/editors/jetbrains/default.nix

Lines changed: 90 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
let
22
# `ides.json` is handwritten and contains information that doesn't change across updates, like maintainers and other metadata
33
# `versions.json` contains everything generated/needed by the update script version numbers, build numbers and tarball hashes
4-
ideInfo = builtins.fromJSON (builtins.readFile ./bin/ides.json);
4+
ideInfo = builtins.fromJSON (builtins.readFile ./ides.json);
55
versions = builtins.fromJSON (builtins.readFile ./bin/versions.json);
66
in
77

88
{
9+
config,
910
lib,
1011
stdenv,
1112
callPackage,
@@ -116,16 +117,8 @@ let
116117
passthru.tests = extraTests // {
117118
plugins = callPackage ./plugins/tests.nix { ideName = pname; };
118119
};
119-
libdbm =
120-
if ideInfo."${pname}".meta.isOpenSource then
121-
communitySources."${pname}".libdbm
122-
else
123-
communitySources.idea-community.libdbm;
124-
fsnotifier =
125-
if ideInfo."${pname}".meta.isOpenSource then
126-
communitySources."${pname}".fsnotifier
127-
else
128-
communitySources.idea-community.fsnotifier;
120+
libdbm = communitySources."${pname}".libdbm or communitySources.idea-oss.libdbm;
121+
fsnotifier = communitySources."${pname}".fsnotifier or communitySources.idea-oss.fsnotifier;
129122
};
130123

131124
communitySources = callPackage ./source { };
@@ -181,16 +174,30 @@ let
181174
--replace-needed libcrypt.so.1 libcrypt.so \
182175
${lib.optionalString stdenv.hostPlatform.isAarch "--replace-needed libxml2.so.2 libxml2.so"}
183176
'';
184-
in
185-
rec {
186-
# Sorted alphabetically
187177

188-
aqua = mkJetBrainsProduct {
189-
pname = "aqua";
178+
# TODO: These can be moved down again when we don't need the aliases anymore:
179+
_idea = buildIdea {
180+
pname = "idea";
190181
extraBuildInputs = [
191182
lldb
183+
musl
192184
];
193185
};
186+
_idea-oss = buildIdea {
187+
pname = "idea-oss";
188+
fromSource = true;
189+
};
190+
_pycharm = buildPycharm {
191+
pname = "pycharm";
192+
extraBuildInputs = [ musl ];
193+
};
194+
_pycharm-oss = buildPycharm {
195+
pname = "pycharm-oss";
196+
fromSource = true;
197+
};
198+
in
199+
{
200+
# Sorted alphabetically. Deprecated products and aliases are at the very end.
194201

195202
clion =
196203
(mkJetBrainsProduct {
@@ -270,28 +277,9 @@ rec {
270277
'';
271278
});
272279

273-
idea-community-bin = buildIdea {
274-
pname = "idea-community";
275-
};
280+
idea = _idea;
276281

277-
idea-community-src = buildIdea {
278-
pname = "idea-community";
279-
fromSource = true;
280-
};
281-
282-
idea-community =
283-
if stdenv.hostPlatform.isDarwin || stdenv.hostPlatform.isAarch64 then
284-
idea-community-bin
285-
else
286-
idea-community-src;
287-
288-
idea-ultimate = buildIdea {
289-
pname = "idea-ultimate";
290-
extraBuildInputs = [
291-
lldb
292-
musl
293-
];
294-
};
282+
idea-oss = _idea-oss;
295283

296284
mps = mkJetBrainsProduct { pname = "mps"; };
297285

@@ -302,20 +290,9 @@ rec {
302290
];
303291
};
304292

305-
pycharm-community-bin = buildPycharm { pname = "pycharm-community"; };
293+
pycharm = _pycharm;
306294

307-
pycharm-community-src = buildPycharm {
308-
pname = "pycharm-community";
309-
fromSource = true;
310-
};
311-
312-
pycharm-community =
313-
if stdenv.hostPlatform.isDarwin then pycharm-community-bin else pycharm-community-src;
314-
315-
pycharm-professional = buildPycharm {
316-
pname = "pycharm-professional";
317-
extraBuildInputs = [ musl ];
318-
};
295+
pycharm-oss = _pycharm-oss;
319296

320297
rider =
321298
(mkJetBrainsProduct {
@@ -390,13 +367,70 @@ rec {
390367
];
391368
};
392369

393-
writerside = mkJetBrainsProduct {
394-
pname = "writerside";
395-
extraBuildInputs = [
396-
musl
397-
];
398-
};
370+
# Plugins
399371

400372
plugins = callPackage ./plugins { };
401373

402374
}
375+
376+
// lib.optionalAttrs config.allowAliases rec {
377+
378+
# Deprecated products and aliases.
379+
380+
aqua =
381+
lib.warnOnInstantiate
382+
"jetbrains.aqua: Aqua has been discontinued by Jetbrains and is not receiving updates. It will be removed in NixOS 26.05."
383+
(mkJetBrainsProduct {
384+
pname = "aqua";
385+
extraBuildInputs = [
386+
lldb
387+
];
388+
});
389+
390+
idea-community =
391+
lib.warnOnInstantiate
392+
"jetbrains.idea-community: IntelliJ IDEA Community has been discontinued by Jetbrains. This deprecated alias uses the, no longer updated, binary build on Darwin & Linux aarch64. On other platforms it uses IDEA Open Source, built from source. Either switch to 'jetbrains.idea-oss' or 'jetbrains.idea'. See: https://blog.jetbrains.com/idea/2025/07/intellij-idea-unified-distribution-plan/"
393+
(
394+
if stdenv.hostPlatform.isDarwin || stdenv.hostPlatform.isAarch64 then
395+
idea-community-bin
396+
else
397+
_idea-oss
398+
);
399+
400+
idea-community-bin =
401+
lib.warnOnInstantiate
402+
"jetbrains.idea-community-bin: IntelliJ IDEA Community has been discontinued by Jetbrains. This binary build is no longer updated. Switch to 'jetbrains.idea-oss' for open source builds (from source) or 'jetbrains.idea' for commercial builds (binary, unfree). See: https://blog.jetbrains.com/idea/2025/07/intellij-idea-unified-distribution-plan/"
403+
(buildIdea {
404+
pname = "idea-community";
405+
});
406+
407+
idea-ultimate = lib.warnOnInstantiate "'jetbrains.idea-ultimate' has been renamed to/replaced by 'jetbrains.idea'" _idea;
408+
409+
idea-community-src = lib.warnOnInstantiate "jetbrains.idea-community-src: IntelliJ IDEA Community has been discontinued by Jetbrains. This is now an alias for 'jetbrains.idea-oss', the Open Source build of IntelliJ. See: https://blog.jetbrains.com/idea/2025/07/intellij-idea-unified-distribution-plan/" _idea-oss;
410+
411+
pycharm-community =
412+
lib.warnOnInstantiate
413+
"pycharm-comminity: PyCharm Community has been discontinued by Jetbrains. This deprecated alias uses the, no longer updated, binary build on Darwin. On Linux it uses PyCharm Open Source, built from source. Either switch to 'jetbrains.pycharm-oss' or 'jetbrains.pycharm'. See: https://blog.jetbrains.com/pycharm/2025/04/pycharm-2025"
414+
(if stdenv.hostPlatform.isDarwin then pycharm-community-bin else _pycharm-oss);
415+
416+
pycharm-community-bin =
417+
lib.warnOnInstantiate
418+
"pycharm-comminity-bin: PyCharm Community has been discontinued by Jetbrains. This binary build is no longer updated. Switch to 'jetbrains.pycharm-oss' for open source builds (from source) or 'jetbrains.pycharm' for commercial builds (binary, unfree). See: https://blog.jetbrains.com/pycharm/2025/04/pycharm-2025"
419+
(buildPycharm {
420+
pname = "pycharm-community";
421+
});
422+
423+
pycharm-community-src = lib.warnOnInstantiate "jetbrains.idea-community-src: PyCharm Community has been discontinued by Jetbrains. This is now an alias for 'jetbrains.pycharm-oss', the Open Source build of PyCharm. See: https://blog.jetbrains.com/pycharm/2025/04/pycharm-2025" _pycharm-oss;
424+
425+
pycharm-professional = lib.warnOnInstantiate "'jetbrains.pycharm-professional' has been renamed to/replaced by 'jetbrains.pycharm'" _pycharm;
426+
427+
writerside =
428+
lib.warnOnInstantiate
429+
"jetbrains.writerside: Writerside has been discontinued by Jetbrains and is not receiving updates. It will be removed in NixOS 26.05."
430+
(mkJetBrainsProduct {
431+
pname = "writerside";
432+
extraBuildInputs = [
433+
musl
434+
];
435+
});
436+
}

pkgs/applications/editors/jetbrains/bin/ides.json renamed to pkgs/applications/editors/jetbrains/ides.json

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,25 +66,37 @@
6666
"homepage": "https://www.jetbrains.com/go/"
6767
}
6868
},
69+
"idea": {
70+
"product": "IntelliJ IDEA",
71+
"productShort": "IDEA",
72+
"wmClass": "jetbrains-idea",
73+
"meta": {
74+
"isOpenSource": false,
75+
"description": "Java, Kotlin, Groovy and Scala IDE from Jetbrains",
76+
"maintainers": [ "gytis-ivaskevicius", "tymscar" ],
77+
"longDescription": "IDE for Java SE, Groovy & Scala development Powerful environment for building Google Android apps Integration with JUnit, TestNG, popular SCMs, Ant & Maven. Also known as IntelliJ.",
78+
"homepage": "https://www.jetbrains.com/idea/"
79+
}
80+
},
6981
"idea-community": {
7082
"product": "IntelliJ IDEA CE",
7183
"productShort": "IDEA",
7284
"wmClass": "jetbrains-idea-ce",
7385
"meta": {
7486
"isOpenSource": true,
75-
"description": "Free Java, Kotlin, Groovy and Scala IDE from jetbrains",
87+
"description": "Free Java, Kotlin, Groovy and Scala IDE from Jetbrains",
7688
"maintainers": [ "gytis-ivaskevicius", "tymscar" ],
7789
"longDescription": "IDE for Java SE, Groovy & Scala development Powerful environment for building Google Android apps Integration with JUnit, TestNG, popular SCMs, Ant & Maven. Also known as IntelliJ.",
7890
"homepage": "https://www.jetbrains.com/idea/"
7991
}
8092
},
81-
"idea-ultimate": {
82-
"product": "IntelliJ IDEA",
93+
"idea-oss": {
94+
"product": "IntelliJ IDEA Open Source",
8395
"productShort": "IDEA",
84-
"wmClass": "jetbrains-idea",
96+
"wmClass": "jetbrains-idea-ce",
8597
"meta": {
86-
"isOpenSource": false,
87-
"description": "Paid-for Java, Kotlin, Groovy and Scala IDE from jetbrains",
98+
"isOpenSource": true,
99+
"description": "Free Java, Kotlin, Groovy and Scala IDE from Jetbrains",
88100
"maintainers": [ "gytis-ivaskevicius", "tymscar" ],
89101
"longDescription": "IDE for Java SE, Groovy & Scala development Powerful environment for building Google Android apps Integration with JUnit, TestNG, popular SCMs, Ant & Maven. Also known as IntelliJ.",
90102
"homepage": "https://www.jetbrains.com/idea/"
@@ -112,6 +124,18 @@
112124
"homepage": "https://www.jetbrains.com/phpstorm/"
113125
}
114126
},
127+
"pycharm": {
128+
"product": "PyCharm",
129+
"productShort": "PyCharm",
130+
"wmClass": "jetbrains-pycharm",
131+
"meta": {
132+
"isOpenSource": false,
133+
"description": "Python IDE from JetBrains",
134+
"maintainers": [ "genericnerdyusername", "tymscar" ],
135+
"longDescription": "Python IDE with complete set of tools for productive development with Python programming language. In addition, the IDE provides high-class capabilities for professional Web development with Django framework and Google App Engine. It has powerful coding assistance, navigation, a lot of refactoring features, tight integration with various Version Control Systems, Unit testing, powerful all-singing all-dancing Debugger and entire customization. PyCharm is developer driven IDE. It was developed with the aim of providing you almost everything you need for your comfortable and productive development!",
136+
"homepage": "https://www.jetbrains.com/pycharm/"
137+
}
138+
},
115139
"pycharm-community": {
116140
"product": "PyCharm CE",
117141
"productShort": "PyCharm",
@@ -124,13 +148,13 @@
124148
"homepage": "https://www.jetbrains.com/pycharm/"
125149
}
126150
},
127-
"pycharm-professional": {
128-
"product": "PyCharm",
151+
"pycharm-oss": {
152+
"product": "PyCharm Open Source",
129153
"productShort": "PyCharm",
130-
"wmClass": "jetbrains-pycharm",
154+
"wmClass": "jetbrains-pycharm-ce",
131155
"meta": {
132-
"isOpenSource": false,
133-
"description": "Paid-for Python IDE from JetBrains",
156+
"isOpenSource": true,
157+
"description": "Free Python IDE from JetBrains",
134158
"maintainers": [ "genericnerdyusername", "tymscar" ],
135159
"longDescription": "Python IDE with complete set of tools for productive development with Python programming language. In addition, the IDE provides high-class capabilities for professional Web development with Django framework and Google App Engine. It has powerful coding assistance, navigation, a lot of refactoring features, tight integration with various Version Control Systems, Unit testing, powerful all-singing all-dancing Debugger and entire customization. PyCharm is developer driven IDE. It was developed with the aim of providing you almost everything you need for your comfortable and productive development!",
136160
"homepage": "https://www.jetbrains.com/pycharm/"

pkgs/applications/editors/jetbrains/plugins/default.nix

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,14 @@ let
4545

4646
selectFile =
4747
id: ide: build:
48-
if !builtins.elem ide pluginsJson.plugins."${id}".compatible then
48+
let
49+
# Allow all PyCharm/IDEA plugins for PyCharm/IDEA Community
50+
# - TODO: Remove this special case once PyCharm/IDEA Community is removed
51+
communityCheck =
52+
(id != "pycharm-community" || builtins.elem ide pluginsJson.plugins.pycharm.compatible)
53+
|| (id != "idea-community" || builtins.elem ide pluginsJson.plugins.idea.compatible);
54+
in
55+
if !communityCheck && !builtins.elem ide pluginsJson.plugins."${id}".compatible then
4956
throw "Plugin with id ${id} does not support IDE ${ide}"
5057
else if !pluginsJson.plugins."${id}".builds ? "${build}" then
5158
throw "Jetbrains IDEs with build ${build} are not in nixpkgs. Try update_plugins.py with --with-build?"

0 commit comments

Comments
 (0)