51 Commits

Author SHA1 Message Date
8090f42cc2 jetbrains: generate IDEA packages 2021-01-26 19:35:45 +11:00
c67b2c2b0e jetbrains: normalize file names 2021-01-26 19:35:45 +11:00
af57ecdd22 jetbrains: add update script wrapper
The main script only does a single program, and requires being fed the
name. This is a wrapper to get those names.
2021-01-26 19:35:45 +11:00
fb2bbf59d0 jetbrains: include small set of generated IDEA plugins 2021-01-25 15:27:16 +11:00
3c8d8f0347 jetbrains: move to auto-generated plugins
Some edge cases but appears to work on my machine (TM).

Still TODO is setting up the job to generate and commit updates.
2021-01-25 15:27:16 +11:00
28235c3b29 psst: 20210114.g1fadc78 -> 20210122.gec114ac 2021-01-24 17:08:22 +11:00
7f2b435225 flake: update inputs 2021-01-24 16:57:03 +11:00
a85fe66919 alacritty-ligatures: 0.7.0.20201204 -> 0.7.1.20210107.gada2680 2021-01-24 16:57:03 +11:00
129b9305be protonmail-bridge: 1.5.4 -> 1.5.6 2021-01-24 16:45:54 +11:00
836cce5196 zsh-z: 20200919.g09209db -> 20210117.g289a4a7 2021-01-24 16:41:32 +11:00
d77a67563a many: use YYYYMMDD.gHASH for git-commit versions 2021-01-24 16:37:51 +11:00
a298d95bd6 psst: 20210103.002c2bb -> 20210114.1fadc78 2021-01-23 14:17:17 +11:00
aceffb4e50 cardboard: init at 20210120 2021-01-23 14:14:56 +11:00
906c5ee15c protonmail-bridge: 1.5.2 -> 1.5.4 2021-01-04 13:13:18 +11:00
c0fb93b48b samrewritten: 2.0 -> 2.1 2021-01-04 12:23:50 +11:00
b46e60ddec samrewritten: add missing platforms 2021-01-04 12:14:05 +11:00
738de5e474 zsh-z: add missing platforms 2021-01-04 12:10:34 +11:00
5008a658a7 libhl: add missing platforms 2021-01-04 12:10:27 +11:00
0a29cfdf1e core: add apps 2021-01-04 12:05:15 +11:00
95e5685f53 psst: init at 20210103.002c2bb 2021-01-04 12:05:15 +11:00
a15ba6ca0a core: remove envrc 2021-01-04 10:49:36 +11:00
2ffc8b3fcd core: migrate to flakes 2020-12-10 21:18:04 +11:00
8b2f440b36 go-qt: manually remove references
Fixes an issue where part of the tests fail due to over-quoting of
`GOFLAGS` and treating `-trimpath` as part of `-mod`.
2020-12-10 10:47:22 +11:00
8548791f31 Revert "jetbrains: update IDEA for generated plugins"
This reverts commit d851231ee9.

The change went ahead too early and the actual plugin generation system
is not complete.
2020-12-09 10:36:42 +11:00
80f909abb1 go-qt: 20200701 -> 20200904 (broken) 2020-12-09 10:29:27 +11:00
ddb0d5147b zsh-z: 2020.06.30.ae71aab -> 2020.09.19.09209db 2020-12-09 10:29:27 +11:00
ed42dab0a5 protonmail-bridge: 1.4.5 -> 1.5.2 2020-12-09 10:29:27 +11:00
5d595e8aba alacritty-ligatures: 0.6.0.20201022 -> 0.7.0.20201204 2020-12-09 10:29:19 +11:00
0baf2e1e02 build(deps): bump cachix/cachix-action from v6 to v8 (#4)
Bumps [cachix/cachix-action](https://github.com/cachix/cachix-action) from v6 to v8.
- [Release notes](https://github.com/cachix/cachix-action/releases)
- [Commits](https://github.com/cachix/cachix-action/compare/v6...6e4751ed42b22f60165d3f266cfa4cce66ae406d)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-09 09:00:54 +11:00
9a31ad18c9 build(deps): bump cachix/install-nix-action from v11 to v12
Bumps [cachix/install-nix-action](https://github.com/cachix/install-nix-action) from v11 to v12.
- [Release notes](https://github.com/cachix/install-nix-action/releases)
- [Commits](https://github.com/cachix/install-nix-action/compare/v11...07da2520eebede906fbeefa9dd0a2b635323909d)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-09 09:00:48 +11:00
62bcbbb29a build(deps): bump actions/checkout from v2.3.3 to v2.3.4
Bumps [actions/checkout](https://github.com/actions/checkout) from v2.3.3 to v2.3.4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2.3.3...5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-09 06:30:46 +00:00
f8e172c166 protonmail-bridge: 1.3.2 -> 1.4.5 2020-10-25 12:46:29 +11:00
a2e8b33dbc alacritty-ligatures: 0.6.0.20201015 -> 0.6.0.20201022 2020-10-25 12:42:06 +11:00
1bfb879c49 alacritty-ligatures: bump rustPackages version
nixos-unstable removed 1.44 while nixpkgs-unstable still has it (why?),
so 1.45 is the new lowest common version.
2020-10-25 12:40:41 +11:00
d851231ee9 jetbrains: update IDEA for generated plugins 2020-10-19 19:13:12 +11:00
bb49706b02 jetbrains: add plugin generation script 2020-10-19 19:10:14 +11:00
9c4a68e3aa jetbrains: add plugins to passthrough 2020-10-18 18:15:35 +11:00
7959b877d9 jetbrains: rework following the Emacs builder
This commit moves a lot of the heavy lifting out of callPackage and back
into regular import, following conventions from upstream Nixpkgs. It
allows for a clearer and less magic definition of new packages,
particularly by downstream, as well, by exposing the *Build package
callers in the attribute set.
2020-10-18 17:47:48 +11:00
1a129ac179 modules/radeon-profile-daemon: fix package import path 2020-10-18 14:41:42 +11:00
32e8d6c12d modules/amdgpu-fan: fix package import path 2020-10-18 14:39:36 +11:00
202ea9929b core: clean up README, remove old shell.nix 2020-10-17 16:56:17 +11:00
bdaa2ab259 ci: enable GitHub Actions 2020-10-17 16:42:42 +11:00
c1c942c346 spotify-ripper: mark as unfree
Allows building CI as free-only following requirements of upstream.
2020-10-17 16:20:37 +11:00
14e18ac2d2 alacritty-ligatures: fix for building on unstable
The unpacking logic for cargoDeps is changed so that the filename
doesn't implicitly have a file suffix appended to it, so we have to
specify that it's a tarball manually. The output hash is updated to
match.
2020-10-17 15:35:24 +11:00
cec9f93414 protonmail-bridge: fix for building on unstable
At some point the propagation logic is being changed such that
nativeBuildInputs isn't included in buildInputs, which means that
pkg-config can't see anything in nativeBuildInputs.
2020-10-17 15:34:29 +11:00
f66f6445ea ci: stable -> unstable
NUR upstream requires that everything builds on Nixpkgs unstable, so I
guess that's what we're using. Also enable NixOS unstable to see if we
can get that for free as well.
2020-10-17 15:34:16 +11:00
64cc4aa0ce alacritty-ligatures: add runtime dependencies
Ones of the changes from 0.5.0 is depending on the system fontconfig,
and one of the ligature changes forces the use of the system freetype.

One of the Rust libraries depends on the C++ stdlib.

At some point the build process stopped bundling the OpenGL libraries,
so add those back in too.
2020-10-17 13:54:44 +11:00
ceb579d797 ci: disable building on unstable channels
Sick of the build failure notifications, and I don't use them in Cachix anyway.
2020-10-17 13:22:55 +11:00
c84fae413b core: fix overlay to merge package sets 2020-10-17 12:55:56 +11:00
6cd420d7af services: port amdgpu services from private config 2020-10-17 12:55:56 +11:00
326f4b9fec docs: update README 2020-10-17 12:55:53 +11:00
33 changed files with 96115 additions and 341 deletions

1
.envrc
View File

@ -1 +0,0 @@
eval "$(lorri direnv)"

View File

@ -3,10 +3,10 @@ on:
pull_request:
push:
schedule:
# rebuild everyday at 2:51
# rebuild everyday at 6:50
# TIP: Choose a random time here so not all repositories are build at once:
# https://www.random.org/clock-times/?num=1&earliest=01%3A00&latest=08%3A00&interval=5&format=html&rnd=new
- cron: '51 2 * * *'
- cron: '50 6 * * *'
jobs:
tests:
strategy:
@ -17,7 +17,7 @@ jobs:
# The repo name as used in
# https://github.com/nix-community/NUR/blob/master/repos.json
nurRepo:
- <YOUR_REPO_NAME>
- xeals
# Set this to cache your build results in cachix for faster builds
# in CI and for everyone who uses your cache.
#
@ -27,23 +27,24 @@ jobs:
# For this to work, you also need to set the CACHIX_SIGNING_KEY secret
# in your repository settings in Github found at https://github.com/<your_githubname>/nur-packages/settings/secrets
cachixName:
- <YOUR_CACHIX_NAME>
- xeals
nixPath:
- nixpkgs=channel:nixos-unstable
- nixpkgs=channel:nixpkgs-unstable
- nixpkgs=channel:nixos-20.03
# Disable due to buildGoModule and buildRustPackage
# - nixpkgs=channel:nixos-20.03
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2.3.3
uses: actions/checkout@v2.3.4
- name: Install nix
uses: cachix/install-nix-action@v11
uses: cachix/install-nix-action@v12
with:
nix_path: "${{ matrix.nixPath }}"
- name: Show nixpkgs version
run: nix-instantiate --eval -E '(import <nixpkgs> {}).lib.version'
- name: Setup cachix
uses: cachix/cachix-action@v6
uses: cachix/cachix-action@v8
if: ${{ matrix.cachixName != '<YOUR_CACHIX_NAME>' }}
with:
name: ${{ matrix.cachixName }}

3
.gitignore vendored
View File

@ -1,3 +1,6 @@
result
result-*
.direnv
.envrc

View File

@ -7,14 +7,13 @@ os: linux
env:
global:
- CACHIX_CACHE="xeals"
- NIXPKGS_ALLOW_UNFREE="1"
- NUR_REPO="xeals"
jobs:
include:
- env: NIX_PATH=nixpkgs=channel:nixpkgs-unstable
- env: NIX_PATH=nixpkgs=channel:nixos-unstable
- env: NIX_PATH=nixpkgs=channel:nixos-20.03
# - env: NIX_PATH=nixpkgs=channel:nixos-20.03
script:
- nix-build ci.nix -kA buildOutputs
@ -24,6 +23,6 @@ script:
after_success:
- if [ -n "${CACHIX_CACHE}" ]; then nix-build ci.nix -kA cacheOutputs | cachix push "${CACHIX_CACHE}"; fi
- if [[ "cron" != "${TRAVIS_EVENT_TYPE}" && "false" = "${TRAVIS_PULL_REQUEST}" && "master" = "${TRAVIS_BRANCH}" ]]; then
- if [[ NUR_REPO != "xeals" && "cron" != "${TRAVIS_EVENT_TYPE}" && "false" = "${TRAVIS_PULL_REQUEST}" && "master" = "${TRAVIS_BRANCH}" ]]; then
curl -XPOST "https://nur-update.herokuapp.com/update?repo=${NUR_REPO}"; fi

View File

@ -2,8 +2,7 @@
**My personal [NUR](https://github.com/nix-community/NUR) repository**
[![Build Status](https://travis-ci.com/xeals/nur-packages.svg?branch=master)](https://travis-ci.com/xeals/nur-packages)
[![Cachix Cache](https://img.shields.io/badge/cachix-xeals-blue.svg)](https://xeals.cachix.org)
[![Build and populate cache](https://github.com/xeals/nur-packages/workflows/Build%20and%20populate%20cache/badge.svg)](https://github.com/xeals/nur-packages/actions) [![Cachix Cache](https://img.shields.io/badge/cachix-xeals-blue.svg)](https://xeals.cachix.org)
## Noteworthy packages
@ -23,10 +22,10 @@ let
};
in
# e.g., for IntelliJ IDEA
xeal.jetbrains.ideaCommunityWithPlugins (jpkgs: [
xeals.jetbrains.ideaCommunityWithPlugins (jpkgs: [
jpkgs.ideavim
jpgs.checkstyle-idea
]})
jpkgs.checkstyle-idea
])
```
#### Issues
@ -43,4 +42,4 @@ The default package comes with nothing (which is not entirely useful -- this wil
## General issues
- [ ] `spotify-ripper` does not build on stable NixOS channels before 20.09 when built with m4a or mp4 support, as `fdk-aac-encoder` is not available
- [ ] Due to weirdness in fixed output hashes, anything using `buildGoModule` and `buildRustPackage` will fail on unstable channels of Nixpkgs, and must be overridden if you want to use these packages on unstable channels
- [ ] Due to changes in toolchains affected fixed output hashes, anything using `buildGoModule` and `buildRustPackage` will fail on NixOS 20.03. Override the hashes of `vendor` and `cargoDeps` attributes as needed

View File

@ -8,165 +8,10 @@
{ pkgs ? import <nixpkgs> { } }:
rec {
import ./pkgs/top-level/all-packages.nix { inherit pkgs; }
// {
# The `lib`, `modules`, and `overlay` names are special
lib = import ./lib { inherit pkgs; }; # functions
modules = import ./modules; # NixOS modules
overlays = import ./overlays; # nixpkgs overlays
# Alacritty with the unmerged ligature patches applied.
alacritty-ligatures = (pkgs.alacritty.override {
# Requires a minimum of 1.41, and this is the only version on both stable
# and unstable channels right now.
inherit (pkgs.rustPackages_1_44) rustPlatform;
}).overrideAttrs (oldAttrs: rec {
pname = "${oldAttrs.pname}-ligatures";
version = "0.6.0.20201015";
src = pkgs.fetchFromGitHub {
owner = "zenixls2";
repo = "alacritty";
fetchSubmodules = true;
rev = "30ebb4303229acbfdbbf00a84a9c46973c4e0334";
sha256 = "1c0951zs1h2d6fjnxixfms3913m1c6yvgmcizgd9gfgx59ghpafi";
};
cargoDeps = oldAttrs.cargoDeps.overrideAttrs (pkgs.lib.const {
name = "${pname}-${version}-vendor";
inherit src;
outputHash = "1zvj8hdlc3fii1ffwkigvxjigwx53vls543pgcv3a2bw4sn1ky1k";
});
});
amdgpu-fan = pkgs.callPackage ./pkgs/tools/misc/amdgpu-fan { };
goModules = pkgs.recurseIntoAttrs rec {
qt = pkgs.libsForQt512.callPackage ./pkgs/development/go-modules/qt { };
};
# A functional Jetbrains IDE-with-plugins package set.
jetbrains =
let
mkJetbrainsPlugins = import ./pkgs/applications/editors/jetbrains/common-plugins.nix {
inherit (pkgs) callPackage;
};
mkIdeaPlugins = import ./pkgs/applications/editors/jetbrains/idea-plugins.nix {
inherit (pkgs) callPackage;
};
builder = import ./pkgs/applications/editors/jetbrains/builder.nix {
inherit (pkgs) lib;
};
jbScope = pkgs.lib.makeScope pkgs.newScope (self: pkgs.lib.makeOverridable
({ jetbrainsPlugins ? mkJetbrainsPlugins
, ideaPlugins ? mkIdeaPlugins
}: ({ }
// jetbrainsPlugins // { inherit jetbrainsPlugins; }
// ideaPlugins // { inherit ideaPlugins; }
// {
jetbrainsWithPlugins = builder self;
}))
{ });
in
rec {
inherit (jbScope) jetbrainsWithPlugins;
clionWithPlugins = jetbrainsWithPlugins pkgs.jetbrains.clion;
ideaCommunityWithPlugins = jetbrainsWithPlugins pkgs.jetbrains.idea-community;
ideaUltimateWithPlugins = jetbrainsWithPlugins pkgs.jetbrains.idea-ultimate;
plugins = jbScope;
};
libhl = pkgs.callPackage ./pkgs/development/libraries/libhl { };
mopidy-subidy = pkgs.callPackage ./pkgs/applications/audio/mopidy/subidy.nix {
python3Packages = pkgs.python3Packages // python3Packages;
};
pam_gnupg = pkgs.callPackage ./pkgs/os-specific/linux/pam_gnupg { };
picom-animations = pkgs.picom.overrideAttrs (oldAttrs: {
pname = "picom-animations";
src = pkgs.fetchFromGitHub {
owner = "jonaburg";
repo = "picom";
rev = "d718c94";
sha256 = "165mc53ryyxn2ybkhikmk51ay3k18mvlsym3am3mgr8cpivmf2rm";
};
});
polybar = pkgs.polybar.overrideAttrs (oldAttrs: {
# Enables an extra button in formatting, indirectly allowing the use of
# the mouse forward and backward buttons.
patches = (oldAttrs.patches or [ ]) ++ [ ./pkgs/applications/misc/polybar/9button.patch ];
});
python2Packages =
let
fixVersion =
{ package
, version
, sha256
, extra ? (oldAttrs: { })
}: package.overrideAttrs (oldAttrs: rec {
inherit version;
src = pkgs.python2Packages.fetchPypi {
inherit (oldAttrs) pname;
inherit version sha256;
};
} // extra oldAttrs);
in
pkgs.recurseIntoAttrs rec {
colorama_0_3_3 = fixVersion {
package = pkgs.python2Packages.colorama;
version = "0.3.3";
sha256 = "1716z9pq1r5ys3nkg7wdrb3h2f9rmd0zdxpxzmx3bgwgf6xg48gb";
};
mutagen_1_30 = fixVersion {
package = pkgs.python2Packages.mutagen;
version = "1.30";
sha256 = "0kv2gjnzbj1w0bswmxm7wi05x6ypi7jk52s0lb8gw8s459j41gyd";
extra = oldAttrs: {
patches = [ ];
};
};
pyspotify_2_0_5 = fixVersion {
package = pkgs.python2Packages.pyspotify;
version = "2.0.5";
sha256 = "0y16c024rrvbvfdqj1n0k4b25b1nbza3i7kspg5b0ci2src1rm7v";
};
overlay = {
colorama = colorama_0_3_3;
mutagen = mutagen_1_30;
pyspotify = pyspotify_2_0_5;
};
};
python3Packages = pkgs.recurseIntoAttrs {
py-sonic = pkgs.python3.pkgs.callPackage ./pkgs/development/python-modules/py-sonic { };
};
# The one in Nixpkgs still extracts the pre-built Debian package instead
# of building from source.
protonmailBridgePackages = pkgs.libsForQt512.callPackage ./pkgs/applications/networking/protonmail-bridge {
inherit goModules;
};
protonmail-bridge = protonmailBridgePackages.protonmail-bridge;
protonmail-bridge-headless = protonmailBridgePackages.protonmail-bridge-headless;
radeon-profile-daemon = pkgs.libsForQt5.callPackage ./pkgs/tools/misc/radeon-profile-daemon { };
samrewritten = pkgs.callPackage ./pkgs/tools/misc/samrewritten { };
spotify-ripper = pkgs.callPackage ./pkgs/tools/misc/spotify-ripper {
# NOTE: Not available in 20.03. Specifying it this way lets me cheat the
# build auto-failing on 20.03 because of the attribute not existing.
inherit (pkgs) fdk-aac-encoder;
python2Packages = pkgs.python2Packages // python2Packages.overlay;
};
zsh-z = pkgs.callPackage ./pkgs/shells/zsh/zsh-z { };
}

43
flake.lock generated Normal file
View File

@ -0,0 +1,43 @@
{
"nodes": {
"flake-utils": {
"locked": {
"lastModified": 1605370193,
"narHash": "sha256-YyMTf3URDL/otKdKgtoMChu4vfVL3vCMkRqpGifhUn0=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5021eac20303a61fafe17224c087f5519baed54d",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1611414562,
"narHash": "sha256-u002KfYA7Uk3vffnnmLz88BmxOzixYFdh+8II6ZT+Kg=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9d6fd2ba135c5b5c85c3332604d39b43e93b8298",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

47
flake.nix Normal file
View File

@ -0,0 +1,47 @@
{
description = "xeals's flake";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
let
inherit (flake-utils.lib) eachDefaultSystem flattenTree;
inherit (nixpkgs.lib.attrsets) filterAttrs mapAttrs;
in
{
nixosModules = mapAttrs (_: path: import path) (import ./modules);
overlays = import ./overlays // {
pkgs = final: prev: import ./pkgs/top-level/all-packages.nix { pkgs = prev; };
};
overlay = final: prev: {
xeals = nixpkgs.lib.composeExtensions self.overlays.pkgs;
};
} // eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
xPkgs = import ./pkgs/top-level/all-packages.nix { inherit pkgs; };
mkApp = opts: { type = "app"; } // opts;
in
rec {
packages = filterAttrs
(attr: drv: builtins.elem system (drv.meta.platforms or [ ]))
(flattenTree xPkgs);
apps = flattenTree {
alacritty = mkApp { program = "${packages.alacritty-ligatures}/bin/alacritty"; };
protonmail-bridge = mkApp { program = "${packages.protonmail-bridge}/bin/protonmail-bridge"; };
protonmail-bridge-headless = mkApp { program = "${packages.protonmail-bridge}/bin/protonmail-bridge"; };
psst = {
cli = mkApp { program = "${packages.psst}/bin/psst-cli"; };
gui = mkApp { program = "${packages.psst}/bin/psst-gui"; };
};
samrewritten = mkApp { program = "${packages.samrewritten}/bin/samrewritten"; };
spotify-ripper = mkApp { program = "${packages.spotify-ripper}/bin/spotify-ripper"; };
};
});
}

View File

@ -13,6 +13,12 @@ in
options.services.amdgpu.fan = {
enable = mkEnableOption "amdgpu-fan";
package = mkOption {
type = types.package;
default = pkgs.amdgpu-fan or (import ../../.. { inherit pkgs; }).amdgpu-fan;
defaultText = "pkgs.amdgpu-fan";
};
speedMatrix = mkOption {
type = with types; listOf (listOf int);
# Translated from upstream default config. Since it tries to write the
@ -45,7 +51,7 @@ in
config = mkIf cfg.enable {
assertions = singleton {
assertion = all (speeds: length speeds == 2) cfg.speedMatrix;
message = "services.amdgpu-fan.speedMatrix must be a list of paired lists";
message = "services.amdgpu.fan.speedMatrix must be a list of paired lists";
};
environment.etc."amdgpu-fan.yml".text = builtins.toJSON {
@ -60,9 +66,9 @@ in
amdgpu-fan = {
description = "amdgpu fan controller";
wantedBy = [ "default.target" ];
after = [ "enable-manual-amdgpu-fan.service" ];
after = [ "amdgpu-pwm.service" ];
serviceConfig = {
ExecStart = "${pkgs.amdgpu-fan}/bin/amdgpu-fan";
ExecStart = "${cfg.package}/bin/amdgpu-fan";
Restart = "always";
};
};

View File

@ -11,6 +11,12 @@ in
{
options.services.radeon-profile-daemon = {
enable = mkEnableOption "radeon-profile-daemon";
package = mkOption {
type = types.package;
default = pkgs.radeon-profile-daemon or (import ../../.. { inherit pkgs; }).radeon-profile-daemon;
defaultText = "pkgs.radeon-profile-daemon";
};
};
config = mkIf cfg.enable {
@ -18,10 +24,10 @@ in
radeon-profile-daemon = {
description = "radeon-profile daemon";
wantedBy = [ "multi-user.target" ];
after = [ "enable-manual-amdgpu-fan.service" ];
after = [ "amdgpu-pwm.service" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.radeon-profile-daemon}/bin/radeon-profile-daemon";
ExecStart = "${package}/bin/radeon-profile-daemon";
};
};
};

View File

@ -0,0 +1,71 @@
{ stdenv
, fetchFromGitHub
, rustPlatform
, cmake
, pkg-config
, openssl
# GUI
, withGui ? true
, copyDesktopItems
, makeDesktopItem
, gtk3
}:
let
inherit (stdenv.lib) optional optionals;
in
assert withGui -> gtk3.meta.available;
rustPlatform.buildRustPackage rec {
pname = "psst";
version = "20210122.gec114ac";
src = fetchFromGitHub {
owner = "jpochyla";
repo = "psst";
rev = "ec114ac8299179c8dd51bc026d6060dc75658b83";
sha256 = "02mh6hjnlimadc3w899hccss31p1r4sxgb5880zwn7yiycbq3yyj";
fetchSubmodules = true;
};
cargoSha256 = "1m01rycnpy9asspih1x9l5ppfbjnqcfdycmzgkrmdwzah3x8s8xc";
nativeBuildInputs = [ pkg-config ]
++ optional withGui copyDesktopItems;
buildInputs = [ openssl ]
++ optional withGui gtk3;
cargoBuildFlags = optionals (!withGui) [
"--workspace"
"--exclude"
"psst-gui"
];
# Unable to exclude targets from the check phase as it doesn't respect
# `cargoBuildFlags`; to save from attempting to build the GUI without meaning
# to, don't bother checking for CLI-only builds.
# https://github.com/NixOS/nixpkgs/blob/77d190f10931c1d06d87bf6d772bf65346c71777/pkgs/build-support/rust/default.nix#L241
doCheck = withGui;
desktopItems = optionals withGui [
(makeDesktopItem {
name = pname;
desktopName = "psst";
genericName = "Spotify Player";
categories = "AudioVideo;Audio;Network;Player;";
comment = "Spotify client with native GUI";
exec = "psst-gui";
extraEntries = "Keywords=spotify;music;";
icon = "spotify";
type = "Application";
})
];
meta = with stdenv.lib; {
description = "Fast and multi-platform Spotify client with native GUI ";
homepage = "https://github.com/jpochyla/psst";
license = licenses.mit;
};
}

View File

@ -1,30 +0,0 @@
{ stdenv
, fetchzip
, jetbrainsPlatforms
}:
{ pluginId
, pname
, version
, versionId
, sha256
, filename ? "${pname}-${version}.zip"
}:
stdenv.mkDerivation {
inherit pname version jetbrainsPlatforms;
src = fetchzip {
inherit sha256;
url = "https://plugins.jetbrains.com/files/${toString pluginId}/${toString versionId}/${filename}";
};
installPhase = ''
mkdir $out
cp -r * $out/
'';
meta = {
homepage = "https://plugins.jetbrains.com/plugin/${pluginId}-${stdenv.lib.toLower pname}";
};
}

View File

@ -1,33 +0,0 @@
{ lib
}: self:
with lib;
package:
pluginsFun:
let
plugins =
if isFunction pluginsFun
then pluginsFun self
else pluginsFun;
info = builtins.parseDrvName package.name;
badPlugins = filter (p: ! elem info.name p.jetbrainsPlatforms) plugins;
errorMsg = "plugins [ ${toString (map (p: p.name) badPlugins)} ] are not available for platform ${info.name}";
in
assert assertMsg (length badPlugins == 0) errorMsg;
package.overrideAttrs (oldAttrs: {
# FIXME: versioning: could just expose upstream
name = "${info.name}-with-plugins-${info.version}";
inherit plugins;
installPhase = oldAttrs.installPhase + ''
for plugin in $plugins; do
ln -s "$plugin" "$out/$name/plugins/$(basename $plugin)"
done
'';
})

View File

@ -1,44 +0,0 @@
{ callPackage }:
let
mkPlugin = callPackage ./build-plugin.nix {
jetbrainsPlatforms = [
"clion"
"datagrip"
"goland"
"idea-community"
"idea-ultimate"
"phpstorm"
"pycharm-community"
"pycharm-professional"
"rider"
"ruby-mine"
"webstorm"
];
};
in
{
ideavim = mkPlugin {
pname = "IdeaVim";
version = "0.57";
pluginId = 164;
versionId = 85009;
sha256 = "1rwfwj0b0nwi7jxhzxk1r0xc190nf4i3b59i0zknpmgb4yc5clzw";
};
checkstyle-idea = mkPlugin {
pname = "CheckStyle-IDEA";
version = "5.42.0";
pluginId = 1065;
versionId = 95757;
sha256 = "0sji3649n5zz84dlidqaklipq6vaiafxsvg0gzy3j59mvkz6dk14";
};
google-java-format = mkPlugin rec {
pname = "google-java-format";
version = "1.7.0.4";
pluginId = 8527;
versionId = 83164;
sha256 = "1pmnn1ksiv44kdga53gi3psrm2sva4bqrxizagbr0if2n0rrvgii";
filename = "${pname}.zip";
};
}

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +1,29 @@
{ callPackage }:
{ lib, stdenv, fetchzip }:
self:
let
mkPlugin = callPackage ./build-plugin.nix {
ideaBuild = import ../../../build-support/jetbrains/plugin.nix {
inherit lib stdenv fetchzip;
jetbrainsPlatforms = [ "idea-community" "idea-ultimate" ];
};
in
{
spring-assistant = mkPlugin {
pname = "intellij-spring-assistant";
version = "0.12.0";
pluginId = 10229;
versionId = 44968;
sha256 = "13cglywzhb4j0qj0bs2jwaz2k8pxrxalv35wgkmgkxr635bxmwsj";
};
}
generateIdea = lib.makeOverridable ({
idea ? ./idea-generated.nix
}: let
imported = import idea {
inherit (self) callPackage;
};
super = imported;
overrides = { };
ideaPlugins = super // overrides;
in ideaPlugins // { inherit ideaBuild; });
in generateIdea { }

View File

@ -0,0 +1,12 @@
#!/usr/bin/env nix-shell
#!nix-shell --show-trace ./updater.nix -i bash
set -e
for app in $APPS; do
./updater-jetbrains $app -o ${app%-[0-9.]*}-generated.nix
done
# Local Variables:
# mode: sh
# End:

View File

@ -0,0 +1,368 @@
#! /usr/bin/env nix-shell
#! nix-shell -i python3 -p python3Packages.lxml python3Packages.requests
import argparse
import os
import re
import requests
import subprocess as sp
import sys
import unicodedata
import urllib
from lxml import etree
# https://plugins.jetbrains.com/docs/marketplace/product-codes.html
PRODUCT_CODE = {
"clion": "CL",
"datagrip": "DB",
"goland": "GO",
"idea-community": "IC",
"idea-ultimate": "IU",
"phpstorm": "PS",
"pycharm-community": "PC",
"pycharm-professional": "PY",
"rider": "RD",
"ruby-mine": "RM",
"webstorm": "WS",
}
PACKAGE_RE = re.compile("[^0-9A-Za-z._-]")
HTML_RE = re.compile("<[^>]+/?>")
def to_slug(name):
slug = name.replace(" ", "-").lstrip(".")
for char in ",/;'\\<>:\"|!@#$%^&*()":
slug = slug.replace(char, "")
slug = unicodedata.normalize("NFD", slug).encode("ascii", "ignore").decode("utf-8")
return slug
class Build:
"""
Transforms a Nixpkgs derivation name into a Jetbrains product code. For
example:
idea-community-2019.3.2 -> IC-193.2
"""
def __init__(self, name):
m = re.search("([0-9]+\.?)+$", name)
version = m.group(0)
code = PRODUCT_CODE[name.replace("-" + version, "")]
vparts = version.split(".")
version = vparts[0][-2:] + vparts[1] + "." + vparts[2]
self.code = code
self.version = version
self.package = name.split("-")[0]
def builder(self):
return self.package + "Build"
def __repr__(self):
return self.code + "-" + self.version
class Plugin:
def __init__(self, data, build, category=None):
self.build = build
self.category = category
self.name = data.find("name").text
self.xml_id = data.find("id").text
self._description = data.find("description").text
self.url = data.get("url") or data.find("vendor").get("url")
self.version = data.find("version").text.replace(" ", "-")
self.slug = to_slug(self.name)
self.orig_slug = self.slug
self.depends = []
for depend in data.findall("depends"):
self.depends.append(depend.text)
def __repr__(self):
return f"<Plugin '{self.name}' {self.version}>"
def description(self):
return re.sub(HTML_RE, "", self._description or "").strip()
def get_download_url(self, deref=True):
"""
Provides the ZIP download URL for this plugin.
The trivial URL fetches the latest version through a redirect for some
build code and provides no locking to a version for the URL. To fetch
a stable URL that can be used as a package source, deref must be set
(which it is by default). However, this comes at the cost of requiring
an HTTP request.
"""
id = urllib.parse.quote(self.xml_id)
url = f"https://plugins.jetbrains.com/pluginManager?action=download&id={id}&build={self.build}"
if deref:
res = requests.get(url, allow_redirects=not deref)
url = "https://plugins.jetbrains.com" + re.sub(
"\?.*$", "", res.headers["location"]
)
self.jetbrains_url = url
if url.endswith("external"):
res = requests.get(url, allow_redirects=not deref)
url = res.headers["location"]
return url
def fetch_external(self, update_only=False):
"""
Performs network calls to update this plugin with information that
cannot be performed from the public XML API.
Additional attributes provided after this method:
download_url : the plugin download location
sha : the SHA256 of the download source
If update_only is true, a full update is performed, also providing:
id : the plugin integer ID
license_url : the plugin license URL
license : the Nixpkgs license attribute
"""
self.download_url = self.get_download_url(deref=True)
self.sha = prefetch(self, self.build, self.download_url)
if update_only:
return
self.id = self.jetbrains_url.split("/")[4]
res = requests.get(
f"https://plugins.jetbrains.com/api/plugins/{self.id}"
).json()
try:
self.url = self.url or res["urls"]["sourceCodeUrl"]
except KeyError:
pass
self.license_url = res["urls"]["licenseUrl"]
self.license = translate_license(self.license_url, fallback=self.url)
def packagename(self):
slug = re.sub(PACKAGE_RE, "", self.slug.lower()).replace(".", "-")
if slug[0] in "1234567890":
return "_" + slug
else:
return slug
def filename(self):
"""
Returns this plugin's filename without an extension. Rely on the
download URL to know the extension.
"""
return f"{self.slug}-{self.version}"
def list_plugins(build):
"""
Lists all plugins for the specified build code.
https://plugins.jetbrains.com/docs/marketplace/plugins-list.html
"""
resp = requests.get(f"https://plugins.jetbrains.com/plugins/list/?build={build}")
return parse_repository(resp.content, build)
def parse_repository(content, build):
tree = etree.XML(content)
plugins = []
for cat in tree.findall("category"):
cat_name = cat.get("name")
for plugin in cat.findall("idea-plugin"):
plugins.append(Plugin(plugin, build, cat_name))
return plugins
def deduplicate(plugins):
"""
Ensures that the plugin list has unique slugs. Modifies the list in-place.
"""
prev = plugins[0]
for plugin in plugins[1:]:
if plugin.orig_slug == prev.orig_slug:
prev.slug = prev.orig_slug + "-" + prev.version.replace(".", "_")
plugin.slug = plugin.orig_slug + "-" + plugin.version.replace(".", "_")
prev = plugin
def prefetch(plugin, build, url=None):
if not url:
url = plugin.download_url or plugin.get_download_url()
res = sp.run(
["nix-prefetch-url", "--name", plugin.filename(), url], capture_output=True,
)
if not res.stdout:
raise IOError(
f"nix-prefetch-url {plugin} failed: {res.stderr.decode('unicode-escape')}"
)
return res.stdout.decode("unicode-escape").strip()
def custom_license(short, full, url, free=False):
return f"""{{
shortName = "{short}";
fullName = "{full}";
url = "{url}";
free = {"true" if free else "false"};
}}"""
def arr(url):
return custom_license("allrightsreserved", "All Rights Reserved", url)
def translate_license(url, fallback=""):
license = url.lower()
if license == "":
print(f"no license for {fallback}", file=sys.stderr)
return arr(fallback)
# Common (license) hosts
elif "github.com" in license or "raw.githubusercontent.com" in license:
try:
owner, repo = url.split("/")[3:5]
except ValueError:
print(f"no license metadata for {url}", file=sys.stderr)
return arr(url)
res = requests.get(
f"https://api.github.com/repos/{owner}/{repo}",
headers={"Accept": "application/vnd.github.v3+json"},
).json()
try:
return translate_license(res["license"]["key"])
except (KeyError, TypeError):
print(f"no license metadata for {url}", file=sys.stderr)
return arr(url)
elif "opensource.org" in license:
os_license = license.rstrip("/").split("/")[-1]
if os_license == "alphabetical":
# Doesn't actually have a license, it's the listing page
return arr(fallback)
return translate_license(os_license)
# Actual translations now
elif "apache.org/licenses/license-2.0" in license or "apache-2.0" in license:
return "lib.licenses.asl20"
elif "artistic-2" in license:
return "lib.licenses.artistic2"
elif "bsd-2-clause" in license:
return "lib.licenses.bsd2"
elif "bsd-3-clause" in license:
return "lib.licenses.bsd3"
elif "eclipse.org/legal/epl-2.0" in license:
return "lib.licenses.epl20"
elif "gpl-3.0" in license:
return "lib.licenses.gpl3Only"
elif "mit" in license:
return "lib.licenses.mit"
elif "osd" in license:
return "lib.licenses.free"
elif "other" == license:
return arr(fallback)
# Custom known licenses
elif "plugins.jetbrains.com/legal/terms-of-use" in license:
return custom_license(
"jetbrains", "Jetbrains Plugin Marketplace Agreement", license
)
# Fallback
else:
print(f"unrecognised license {license}", file=sys.stderr)
return arr(license)
def write_packages(outfile, plugins):
builder = plugins[0].build.builder() or ""
outfile.write("{callPackage}:\n{")
for i, plugin in enumerate(plugins):
print(f"{i:04} {plugin.packagename()}")
try:
plugin.fetch_external()
except IOError as e:
print(e, file=sys.stderr)
continue
src_url = plugin.download_url
src_ext = os.path.splitext(src_url)[-1]
sha = plugin.sha
build_inputs = []
if src_ext == ".zip":
build_inputs.append("unzip")
# TODO: Dependencies are provided as package IDs but refer to both
# internal and external plugins; need to find some way to resolve them
requires = []
# TODO: Licenses are actually on the website, but aren't provided in the API
license = plugin.license
call_args = [str(builder), "fetchurl", "lib"]
for binput in build_inputs:
call_args.append(binput)
outfile.write(
f"""
{plugin.packagename()} = callPackage ({{ {", ".join(sorted(call_args))} }}: {builder} {{
pname = "{plugin.slug}";
plugname = "{plugin.name}";
plugid = "{plugin.xml_id}";
version = "{plugin.version}";
src = fetchurl {{
url = "{src_url}";
sha256 = "{sha}";
name = "{plugin.filename()}{src_ext}";
}};
buildInputs = [ {" ".join(build_inputs)} ];
packageRequires = [ {" ".join(requires)} ];
meta = {{
homepage = "{plugin.url or ""}";
license = {license};
description = ''
{plugin.description()}
'';
}};
}}) {{}};
"""
)
outfile.write("}\n")
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
"-n", "--number", type=int, help="Limit the number of packages to write",
)
parser.add_argument(
"-o", "--out", type=str, help="File to write plugins to",
)
parser.add_argument("-O", "--offset", type=int, help="Offset number of packages")
parser.add_argument(
"package",
metavar="PACKAGE",
type=str,
help="The Nixpkgs package name (inc. version)",
)
args = parser.parse_args()
build = Build(args.package)
plugins = list_plugins(build)
plugins.sort(key=lambda p: p.slug)
deduplicate(plugins)
if args.offset:
plugins = plugins[args.offset :]
if args.number:
plugins = plugins[: args.number]
print(f"Generating packages for {len(plugins)} plugins", file=sys.stderr)
if not args.out:
write_packages(sys.stdout, plugins)
else:
with open(args.out, "w") as f:
write_packages(f, plugins)
main()

View File

@ -0,0 +1,26 @@
{ pkgs ? import <nixpkgs> { } }:
let
inherit (pkgs.stdenv) lib;
in
pkgs.mkShell {
buildInputs = [
pkgs.bash
];
APPS = lib.mapAttrsToList
(k: v: v.name)
{
inherit (pkgs.jetbrains)
clion
datagrip
goland
idea-community
idea-ultimate
phpstorm
pycharm-community
pycharm-professional
rider
ruby-mine
webstorm;
};
}

View File

@ -0,0 +1,49 @@
{ lib, makeWrapper, runCommand }: self:
with lib;
package:
pluginsFun:
let
plugins =
if isFunction pluginsFun
then pluginsFun self
else pluginsFun;
# FIXME: Is this still needed?
info = builtins.parseDrvName package.name;
badPlugins = filter (p: ! elem info.name p.jetbrainsPlatforms) plugins;
errorMsg = "plugins [ ${toString (map (p: p.name) badPlugins)} ] are not available for platform ${info.name}";
in
assert assertMsg (length badPlugins == 0) errorMsg;
runCommand
(appendToName "with-plugins" package).name
{
nativeBuildInputs = [ package makeWrapper ];
inherit package plugins;
packageName = package.name;
preferLocalBuild = true;
allowSubstitutes = false;
} ''
mkdir -p $out/$packageName/plugins
for dir in $package/*; do
cp -r $dir $out/
done
# Install plugins
for plugin in $plugins; do
local pluginName=$(basename $plugin)
pluginName=''${pluginName#*-}
pluginName=''${pluginName%-[0-9.]*}
ln -s $plugin $out/$packageName/plugins/$pluginName
done
# Fix up wrapper
substituteInPlace $out/bin/* \
--replace "$package" "$out"
''

View File

@ -20,19 +20,22 @@ let
buildGoModule (stdenv.lib.recursiveUpdate args rec {
inherit pname;
version = "1.3.2";
version = "1.5.6";
src = fetchFromGitHub {
owner = "ProtonMail";
repo = "proton-bridge";
rev = "v${version}";
sha256 = "05nj8hxr7ay0r2r46k1pxjb96swzkd67k1n0kz9203sjgax5y6bw";
rev = "br-${version}";
sha256 = "1na8min9cmn82lpad58abw6837k303fr09l6cvzswaxs73f231ig";
};
vendorSha256 = "14grhpxld9ajg28b0zwc39kwmikxqy9pm42nfdc04g6fmaxvi5c9";
vendorSha256 = "1219xa1347877bfhnid15y6w9s4hf1czbrmll2iha4gpsmg066bb";
nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [
pkg-config
];
buildInputs = (args.buildInputs or [ ]) ++ [
libsecret
];
@ -58,7 +61,6 @@ let
};
});
in
{

View File

@ -0,0 +1,62 @@
diff --git a/cardboard/meson.build b/cardboard/meson.build
index b236f71..a90f230 100644
--- a/cardboard/meson.build
+++ b/cardboard/meson.build
@@ -4,24 +4,15 @@ xkbcommon = dependency('xkbcommon')
xcb = dependency('xcb', required: get_option('xwayland'))
wlroots_version = '>=0.10.0'
-wlroots_proj = subproject(
+wlroots = dependency(
'wlroots',
- default_options: ['examples=false'],
required: true,
version: wlroots_version,
)
-wlroots = wlroots_proj.get_variable('wlroots')
-wlroots_conf = wlroots_proj.get_variable('conf_data')
-wlroots_has_xwayland = wlroots_conf.get('WLR_HAS_XWAYLAND') == 1
+have_xwayland = xcb.found()
-if get_option('xwayland').enabled() and not wlroots_has_xwayland
- error('Cannot enable Xwayland support in cardboard: wlroots has been built without Xwayland support')
-endif
-have_xwayland = xcb.found() and wlroots_has_xwayland
-
-expected_proj = subproject('expected', required: true)
-expected = expected_proj.get_variable('expected_dep')
+expected = dependency('tl-expected', required: true, method: 'cmake', modules: ['tl::expected'])
conf_data = configuration_data()
conf_data.set10('HAVE_XWAYLAND', have_xwayland)
diff --git a/cutter/meson.build b/cutter/meson.build
index f1260a4..1485f37 100644
--- a/cutter/meson.build
+++ b/cutter/meson.build
@@ -1,6 +1,5 @@
# SPDX-License-Identifier: GPL-3.0-only
-expected_proj = subproject('expected', required: true)
-expected = expected_proj.get_variable('expected_dep')
+expected = dependency('tl-expected', required: true, method: 'cmake', modules: ['tl::expected'])
executable(
'cutter',
diff --git a/libcardboard/meson.build b/libcardboard/meson.build
index 89698fe..3ac8115 100644
--- a/libcardboard/meson.build
+++ b/libcardboard/meson.build
@@ -1,11 +1,9 @@
# SPDX-License-Identifier: GPL-3.0-only
libcardboard_inc = include_directories('include')
-expected_proj = subproject('expected', required: true)
-expected = expected_proj.get_variable('expected_dep')
+expected = dependency('tl-expected', required: true, method: 'cmake', modules: ['tl::expected'])
-cereal_proj = subproject('cereal', required: true)
-cereal = cereal_proj.get_variable('cereal_dep')
+cereal = dependency('cereal', required: true, method: 'cmake')
sources = files(
'src/command_protocol.cpp',

View File

@ -0,0 +1,71 @@
{ stdenv
, fetchFromGitLab
, fetchzip
, cereal
, cmake
, git
, libGL
, libX11
, libinput
, libxkbcommon
, mesa
, meson
, ninja
, pixman
, pkg-config
, tl-expected
, wayland
, wayland-protocols
, wlroots
, xwayland
}:
stdenv.mkDerivation rec {
pname = "cardboard";
version = "20210120.g7b15613";
src = fetchFromGitLab {
owner = "cardboardwm";
repo = "cardboard";
rev = "7b15613e6e1222a6a83d69a2e5da2810dfb45522";
sha256 = "044sb0lv1gcywpdncvlv7npxvbsqcc1mwpk0f6i73dinchdz7gmq";
};
patches = [
./0001-use-system-dependencies.patch
];
# CMake likes to own the configurePhase, but we only need it for dependency
# discovery. Remove it.
configurePhase = "mesonConfigurePhase";
nativeBuildInputs = [
cmake
meson
ninja
pkg-config
];
buildInputs = [
cereal
libGL
libX11
libinput
libxkbcommon
pixman
tl-expected
wayland
wayland-protocols
wlroots
];
passthru.providedSessions = [ "cardboard" ];
meta = {
description = "Scrollable tiling Wayland compositor designed with laptops in mind";
homepage = "https://gitlab.com/cardboardwm/cardboard";
license = stdenv.lib.licenses.gpl3;
platforms = wlroots.meta.platforms;
};
}

View File

@ -0,0 +1,41 @@
{ lib
, stdenv
, fetchzip
, jetbrainsPlatforms
}:
{ plugid
, pname
, version
, ...
}@args:
let
defaultMeta = {
broken = false;
} // lib.optionalAttrs ((args.src.meta.homepage or "") != "") {
homepage = args.src.meta.homepage;
} // lib.optionalAttrs ((args.src.meta.description or "") != "") {
description = args.src.meta.description;
} // lib.optionalAttrs ((args.src.meta.license or {}) != {}) {
license = args.src.meta.license;
};
in
stdenv.mkDerivation (args // {
passthru = { inherit jetbrainsPlatforms; };
dontUnpack = lib.any (lib.hasSuffix ".jar") args.src.urls;
installPhase = ''
mkdir $out
cp -r * $out/
'';
meta = {
inherit (args.meta) license description;
homepage = if (args.meta.homepage == "") then null else args.meta.homepage;
};
})

View File

@ -3,21 +3,29 @@
, buildGoModule
, makeWrapper
, go
, pkg-config
, qmake
, removeReferencesTo
}:
buildGoModule rec {
pname = "go-qt";
version = "20200701";
version = "20200904.gc0c124a";
src = fetchFromGitHub {
owner = "therecipe";
repo = "qt";
rev = "7f61353ee73e225efd0b08dacf0ef32f41285c71";
sha256 = "1qwyi3rr6x49w2cbxhsyg3sbyxib7l08g6j6z1mb5w22bdgmcy7c";
rev = "c0c124a5770d357908f16fa57e0aa0ec6ccd3f91";
sha256 = "197wdh2v0g5g2dpb1gcd5gp0g4wqzip34cawisvy6z7mygmsc8rd";
};
# fails with `GOFLAGS=-vendor=mod -trimpath`
allowGoReference = true;
preFixup = ''
find $out -type f -exec ${removeReferencesTo}/bin/remove-references-to -t ${go} '{}' +
'';
vendorSha256 = "00wghn93xz240ddj47b8mkbx3cg7c0486igp6vv0x9r6ylhywsm6";
subPackages = [ "cmd/..." ];

View File

@ -26,9 +26,10 @@ stdenv.mkDerivation rec {
mkdir -p $out/include $out/lib
'';
meta = {
meta = with stdenv.lib; {
homepage = "https://github.com/xant/libhl";
description = "Simple and fast C library implementing a thread-safe API to manage hash-tables, linked lists, lock-free ring buffers and queues ";
license = stdenv.lib.licenses.lgpl3;
license = licenses.lgpl3;
platforms = platforms.all;
};
}

View File

@ -7,13 +7,13 @@
stdenv.mkDerivation {
pname = "zsh-z";
version = "2020.06.30.ae71aab";
version = "20210117.g289a4a7";
src = fetchFromGitHub {
owner = "agkozak";
repo = "zsh-z";
rev = "ae71aabec5472095b01d25b4c341adb349c277f4";
sha256 = "1b3ad39l90jqzvfym6xl7lxsmab0anmjs7viiz8ldxddad9106b0";
rev = "289a4a7208db9b1778cba71c58fed46dbcea3bc7";
sha256 = "016prpavxdzjg372y2700rczdgzjb53bqz5mxjgmvrvjxwj69cf0";
};
nativeBuildInputs = [ installShellFiles ];
@ -21,8 +21,7 @@ stdenv.mkDerivation {
propogatedBuildInputs = [ zsh ];
installPhase = ''
install -D zsh-z.plugin.zsh \
$out/share/zsh-z/zsh-z.zsh
install -D zsh-z.plugin.zsh $out/share/zsh-z/zsh-z.zsh
installShellCompletion --zsh _zshz
'';
@ -30,5 +29,6 @@ stdenv.mkDerivation {
description = ''Jump quickly to directories that you have visited "frecently." A native ZSH port of z.sh.'';
homepage = "https://github.com/agkozak/zsh-z";
license = stdenv.lib.licenses.mit;
platforms = zsh.meta.platforms;
};
}

View File

@ -7,7 +7,7 @@
stdenv.mkDerivation rec {
pname = "radeon-profile-daemon";
version = "20190603";
version = "20190603.g06qxq2h";
nativeBuildInputs = [ qmake ];
buildInputs = [ qtbase ];

View File

@ -13,13 +13,13 @@
stdenv.mkDerivation rec {
pname = "SamRewritten";
version = "2.0";
version = "2.1";
src = fetchFromGitHub {
owner = "PaulCombal";
repo = pname;
rev = "202005";
sha256 = "0zcb6cmzk4fvbf0rkyyfvlnh9mhi0wz89parprkz6vxrj65ph1f6";
rev = "202008";
sha256 = "ab7903b997675b0d4d7eede15430fc5ca2736e6c25c7f95a7c97e1ce25582a1c";
};
nativeBuildInputs = [ gnumake pkg-config ];
@ -33,21 +33,10 @@ stdenv.mkDerivation rec {
NIX_CFLAGS_LINK = "-pthread";
# FIXME: Use `make install` after the next release
# FIXME: Get `substituteInPlace` working
installPhase = ''
mkdir -p $out/lib/SamRewritten/{bin,glade,assets}
mkdir -p $out/share/icons/hicolor/{64x64,256x256}/apps
mkdir -p $out/share/applications
mkdir -p $out/bin
cp bin/launch.sh bin/samrewritten bin/libsteam_api.so $out/lib/SamRewritten/bin/
ln -s $out/lib/SamRewritten/bin/launch.sh $out/bin/samrewritten
cp glade/main_window.glade $out/lib/SamRewritten/glade/main_window.glade
cp assets/icon_64.png $out/share/icons/hicolor/64x64/apps/samrewritten.png
cp assets/icon_256.png $out/share/icons/hicolor/256x256/apps/samrewritten.png
cp assets/icon_256.png $out/lib/SamRewritten/assets/
makeFlags = [ "PREFIX=$(out)" ];
substitute package/samrewritten.desktop $out/share/applications/samrewritten.desktop \
postFixup = ''
substituteInPlace $out/share/applications/samrewritten.desktop \
--replace /usr/bin/samrewritten $out/bin/samrewritten
'';
@ -55,5 +44,6 @@ stdenv.mkDerivation rec {
description = "Steam Achievement Manager For Linux";
homepage = "https://github.com/PaulCombal/SamRewritten";
license = licenses.gpl3;
platforms = platforms.linux;
};
}

View File

@ -20,7 +20,7 @@ assert opusSupport -> opusTools.meta.available;
python2Packages.buildPythonApplication rec {
pname = "spotify-ripper";
version = "2016.12.31";
version = "20161231.gd046419";
src = fetchFromGitHub {
owner = "hbashton";
@ -57,6 +57,7 @@ python2Packages.buildPythonApplication rec {
to WAV, FLAC, Ogg Vorbis, Opus, AAC, and MP4/M4A.
'';
homepage = "https://github.com/hbashton/spotify-ripper";
license = stdenv.lib.licenses.mit;
# spotify-ripper itself is MIT, but the upstream libspotify is unfree.
license = stdenv.lib.licenses.unfree;
};
}

View File

@ -0,0 +1,169 @@
{ pkgs }:
rec {
# Alacritty with the unmerged ligature patches applied.
alacritty-ligatures = pkgs.alacritty.overrideAttrs (oldAttrs: rec {
pname = "${oldAttrs.pname}-ligatures";
version = "0.7.1.20210107.gada2680";
src = pkgs.fetchFromGitHub {
owner = "zenixls2";
repo = "alacritty";
fetchSubmodules = true;
rev = "ada2680e79a8f53cd350263c8cc91d2e2a264d81";
sha256 = "0c0k1ib1dl35731zyjb32apyn28xc63mhbwsig5mz3hnkyk5nisr";
};
cargoDeps = oldAttrs.cargoDeps.overrideAttrs (pkgs.lib.const {
name = "${pname}-${version}-vendor.tar.gz";
inherit src;
outputHash = "1d1yz4xmal0f3c0pcn59lxfh5a3532nv7dv7s95svvi8qsvnk9gv";
});
ligatureInputs = [
pkgs.fontconfig
pkgs.freetype
pkgs.libglvnd
pkgs.stdenv.cc.cc.lib
pkgs.xlibs.libxcb
];
buildInputs = (oldAttrs.buildInputs or []) ++ ligatureInputs;
# HACK: One of the ligature libraries required the C++ stdlib at runtime,
# and I can't work out a better way to push it to the RPATH.
postInstall = pkgs.lib.optional (!pkgs.stdenv.isDarwin) ''
patchelf \
--set-rpath ${pkgs.lib.makeLibraryPath ligatureInputs}:"$(patchelf --show-rpath $out/bin/alacritty)" \
$out/bin/alacritty
'';
meta = oldAttrs.meta // {
description = "Alacritty with ligature patch applied";
homepage = "https://github.com/zenixls2/alacritty/tree/ligature";
};
});
amdgpu-fan = pkgs.callPackage ../tools/misc/amdgpu-fan { };
cardboard = pkgs.callPackage ../applications/window-managers/cardboard { };
goModules = pkgs.recurseIntoAttrs rec {
qt = pkgs.libsForQt512.callPackage ../development/go-modules/qt { };
};
# A functional Jetbrains IDE-with-plugins package set.
jetbrains = pkgs.dontRecurseIntoAttrs rec {
jetbrainsPluginsFor = variant: import ../top-level/jetbrains-plugins.nix {
inherit (pkgs) lib newScope stdenv fetchzip makeWrapper runCommand;
inherit variant;
};
pluginBuild = jetbrainsPlatforms: pkgs.callPackage ../build-support/jetbrains/plugin.nix {
inherit jetbrains jetbrainsPlatforms;
};
clionPlugins = pkgs.dontRecurseIntoAttrs (jetbrainsPluginsFor pkgs.jetbrains.clion);
ideaCommunityPlugins = pkgs.dontRecurseIntoAttrs (jetbrainsPluginsFor pkgs.jetbrains.idea-community);
ideaUltimatePlugins = pkgs.dontRecurseIntoAttrs (jetbrainsPluginsFor pkgs.jetbrains.idea-ultimate);
clionWithPlugins = clionPlugins.jetbrainsWithPlugins;
ideaCommunityWithPlugins = ideaCommunityPlugins.jetbrainsWithPlugins;
ideaUltimateWithPlugins = ideaUltimatePlugins.jetbrainsWithPlugins;
};
libhl = pkgs.callPackage ../development/libraries/libhl { };
mopidy-subidy = pkgs.callPackage ../applications/audio/mopidy/subidy.nix {
python3Packages = pkgs.python3Packages // python3Packages;
};
pam_gnupg = pkgs.callPackage ../os-specific/linux/pam_gnupg { };
picom-animations = pkgs.picom.overrideAttrs (oldAttrs: {
pname = "picom-animations";
src = pkgs.fetchFromGitHub {
owner = "jonaburg";
repo = "picom";
rev = "d718c94";
sha256 = "165mc53ryyxn2ybkhikmk51ay3k18mvlsym3am3mgr8cpivmf2rm";
};
});
polybar = pkgs.polybar.overrideAttrs (oldAttrs: {
# Enables an extra button in formatting, indirectly allowing the use of
# the mouse forward and backward buttons.
patches = (oldAttrs.patches or [ ]) ++ [ ../applications/misc/polybar/9button.patch ];
});
psst = pkgs.callPackage ../applications/audio/psst { };
python2Packages =
let
fixVersion =
{ package
, version
, sha256
, extra ? (oldAttrs: { })
}: package.overrideAttrs (oldAttrs: rec {
inherit version;
src = pkgs.python2Packages.fetchPypi {
inherit (oldAttrs) pname;
inherit version sha256;
};
} // extra oldAttrs);
in
pkgs.recurseIntoAttrs rec {
colorama_0_3_3 = fixVersion {
package = pkgs.python2Packages.colorama;
version = "0.3.3";
sha256 = "1716z9pq1r5ys3nkg7wdrb3h2f9rmd0zdxpxzmx3bgwgf6xg48gb";
};
mutagen_1_30 = fixVersion {
package = pkgs.python2Packages.mutagen;
version = "1.30";
sha256 = "0kv2gjnzbj1w0bswmxm7wi05x6ypi7jk52s0lb8gw8s459j41gyd";
extra = oldAttrs: {
patches = [ ];
};
};
pyspotify_2_0_5 = fixVersion {
package = pkgs.python2Packages.pyspotify;
version = "2.0.5";
sha256 = "0y16c024rrvbvfdqj1n0k4b25b1nbza3i7kspg5b0ci2src1rm7v";
};
overlay = {
colorama = colorama_0_3_3;
mutagen = mutagen_1_30;
pyspotify = pyspotify_2_0_5;
};
};
python3Packages = pkgs.recurseIntoAttrs {
py-sonic = pkgs.python3.pkgs.callPackage ../development/python-modules/py-sonic { };
};
# The one in Nixpkgs still extracts the pre-built Debian package instead
# of building from source.
protonmailBridgePackages = pkgs.libsForQt512.callPackage ../applications/networking/protonmail-bridge {
inherit goModules;
};
protonmail-bridge = protonmailBridgePackages.protonmail-bridge;
protonmail-bridge-headless = protonmailBridgePackages.protonmail-bridge-headless;
radeon-profile-daemon = pkgs.libsForQt5.callPackage ../tools/misc/radeon-profile-daemon { };
samrewritten = pkgs.callPackage ../tools/misc/samrewritten { };
spotify-ripper = pkgs.callPackage ../tools/misc/spotify-ripper {
# NOTE: Not available in 20.03. Specifying it this way lets me cheat the
# build auto-failing on 20.03 because of the attribute not existing.
inherit (pkgs) fdk-aac-encoder;
python2Packages = pkgs.python2Packages // python2Packages.overlay;
};
zsh-z = pkgs.callPackage ../shells/zsh/zsh-z { };
}

View File

@ -0,0 +1,29 @@
{ lib
, newScope
, stdenv
, fetchzip
, makeWrapper
, runCommand
, variant
}:
let
mkIdeaPlugins = import ../applications/editors/jetbrains/idea-plugins.nix {
inherit lib stdenv fetchzip;
};
jetbrainsWithPlugins = import ../applications/editors/jetbrains/wrapper.nix {
inherit lib makeWrapper runCommand;
};
in lib.makeScope newScope (self: lib.makeOverridable ({
ideaPlugins ? mkIdeaPlugins self
}: ({ }
// ideaPlugins // { inherit ideaPlugins; }
// {
inherit variant;
jetbrainsWithPlugins = jetbrainsWithPlugins self variant;
})
) { })

View File

@ -1,7 +0,0 @@
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
buildInputs = [
pkgs.jsonnet pkgs.drone-cli
];
}