Compare commits
	
		
			46 Commits
		
	
	
		
			64cc4aa0ce
			...
			jetbrains
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 8090f42cc2 | |||
| c67b2c2b0e | |||
| af57ecdd22 | |||
| fb2bbf59d0 | |||
| 3c8d8f0347 | |||
| 28235c3b29 | |||
| 7f2b435225 | |||
| a85fe66919 | |||
| 129b9305be | |||
| 836cce5196 | |||
| d77a67563a | |||
| a298d95bd6 | |||
| aceffb4e50 | |||
| 906c5ee15c | |||
| c0fb93b48b | |||
| b46e60ddec | |||
| 738de5e474 | |||
| 5008a658a7 | |||
| 0a29cfdf1e | |||
| 95e5685f53 | |||
| a15ba6ca0a | |||
| 2ffc8b3fcd | |||
| 8b2f440b36 | |||
| 8548791f31 | |||
| 80f909abb1 | |||
| ddb0d5147b | |||
| ed42dab0a5 | |||
| 5d595e8aba | |||
|  | 0baf2e1e02 | ||
|  | 9a31ad18c9 | ||
|  | 62bcbbb29a | ||
| f8e172c166 | |||
| a2e8b33dbc | |||
| 1bfb879c49 | |||
| d851231ee9 | |||
| bb49706b02 | |||
| 9c4a68e3aa | |||
| 7959b877d9 | |||
| 1a129ac179 | |||
| 32e8d6c12d | |||
| 202ea9929b | |||
| bdaa2ab259 | |||
| c1c942c346 | |||
| 14e18ac2d2 | |||
| cec9f93414 | |||
| f66f6445ea | 
							
								
								
									
										17
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							| @@ -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
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,3 +1,6 @@ | ||||
| result | ||||
| result-* | ||||
|  | ||||
| .direnv | ||||
| .envrc | ||||
|  | ||||
|   | ||||
| @@ -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:nixpkgs-unstable | ||||
|     - env: NIX_PATH=nixpkgs=channel:nixos-unstable | ||||
|     # - 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 | ||||
|  | ||||
|   | ||||
| @@ -2,8 +2,7 @@ | ||||
|  | ||||
| **My personal [NUR](https://github.com/nix-community/NUR) repository** | ||||
|  | ||||
| [](https://travis-ci.com/xeals/nur-packages) | ||||
| [](https://xeals.cachix.org) | ||||
| [](https://github.com/xeals/nur-packages/actions) [](https://xeals.cachix.org) | ||||
|  | ||||
| ## Noteworthy packages | ||||
|  | ||||
| @@ -25,7 +24,7 @@ in | ||||
|   # e.g., for IntelliJ IDEA | ||||
|   xeals.jetbrains.ideaCommunityWithPlugins (jpkgs: [ | ||||
|     jpkgs.ideavim | ||||
|     jpgs.checkstyle-idea | ||||
|     jpkgs.checkstyle-idea | ||||
|   ]) | ||||
| ``` | ||||
|  | ||||
| @@ -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 | ||||
|   | ||||
							
								
								
									
										177
									
								
								default.nix
									
									
									
									
									
								
							
							
						
						
									
										177
									
								
								default.nix
									
									
									
									
									
								
							| @@ -8,183 +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 { | ||||
|     # 0.6.0 requires a minimum of 1.43, 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"; | ||||
|     }); | ||||
|  | ||||
|     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 | ||||
|     ''; | ||||
|   }); | ||||
|  | ||||
|   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
									
								
							
							
						
						
									
										43
									
								
								flake.lock
									
									
									
										generated
									
									
									
										Normal 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
									
								
							
							
						
						
									
										47
									
								
								flake.nix
									
									
									
									
									
										Normal 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"; }; | ||||
|         }; | ||||
|       }); | ||||
| } | ||||
| @@ -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"; | ||||
|         }; | ||||
|       }; | ||||
|   | ||||
| @@ -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"; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|   | ||||
							
								
								
									
										71
									
								
								pkgs/applications/audio/psst/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								pkgs/applications/audio/psst/default.nix
									
									
									
									
									
										Normal 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; | ||||
|   }; | ||||
| } | ||||
| @@ -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}"; | ||||
|   }; | ||||
| } | ||||
| @@ -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 | ||||
|   ''; | ||||
| }) | ||||
| @@ -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"; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										95026
									
								
								pkgs/applications/editors/jetbrains/idea-generated.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95026
									
								
								pkgs/applications/editors/jetbrains/idea-generated.nix
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -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 { } | ||||
|  | ||||
|   | ||||
							
								
								
									
										12
									
								
								pkgs/applications/editors/jetbrains/update-jetbrains
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								pkgs/applications/editors/jetbrains/update-jetbrains
									
									
									
									
									
										Executable 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: | ||||
							
								
								
									
										368
									
								
								pkgs/applications/editors/jetbrains/updater-jetbrains
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										368
									
								
								pkgs/applications/editors/jetbrains/updater-jetbrains
									
									
									
									
									
										Executable 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() | ||||
							
								
								
									
										26
									
								
								pkgs/applications/editors/jetbrains/updater.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								pkgs/applications/editors/jetbrains/updater.nix
									
									
									
									
									
										Normal 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; | ||||
|     }; | ||||
| } | ||||
							
								
								
									
										49
									
								
								pkgs/applications/editors/jetbrains/wrapper.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								pkgs/applications/editors/jetbrains/wrapper.nix
									
									
									
									
									
										Normal 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" | ||||
| '' | ||||
| @@ -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 | ||||
|  | ||||
| { | ||||
|   | ||||
| @@ -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', | ||||
							
								
								
									
										71
									
								
								pkgs/applications/window-managers/cardboard/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								pkgs/applications/window-managers/cardboard/default.nix
									
									
									
									
									
										Normal 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; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										41
									
								
								pkgs/build-support/jetbrains/plugin.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								pkgs/build-support/jetbrains/plugin.nix
									
									
									
									
									
										Normal 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; | ||||
|   }; | ||||
| }) | ||||
| @@ -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/..." ]; | ||||
|  | ||||
|   | ||||
| @@ -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; | ||||
|   }; | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
|   }; | ||||
| } | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|  | ||||
| stdenv.mkDerivation rec { | ||||
|   pname = "radeon-profile-daemon"; | ||||
|   version = "20190603"; | ||||
|   version = "20190603.g06qxq2h"; | ||||
|  | ||||
|   nativeBuildInputs = [ qmake ]; | ||||
|   buildInputs = [ qtbase ]; | ||||
|   | ||||
| @@ -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; | ||||
|   }; | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
|   }; | ||||
| } | ||||
|   | ||||
							
								
								
									
										169
									
								
								pkgs/top-level/all-packages.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										169
									
								
								pkgs/top-level/all-packages.nix
									
									
									
									
									
										Normal 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 { }; | ||||
| } | ||||
							
								
								
									
										29
									
								
								pkgs/top-level/jetbrains-plugins.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								pkgs/top-level/jetbrains-plugins.nix
									
									
									
									
									
										Normal 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; | ||||
|   }) | ||||
| ) { }) | ||||
		Reference in New Issue
	
	Block a user