Compare commits
	
		
			184 Commits
		
	
	
		
			jetbrains
			...
			5d8b61050c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 5d8b61050c | ||
| a984858a7f | |||
| 504b715b42 | |||
|  | 5d757c2fcf | ||
|  | 8ccdad907f | ||
| 47b05d81c1 | |||
| d5421d87db | |||
|  | d2eec57ac2 | ||
| cf0dcee23f | |||
| 706e911539 | |||
| 5f20482f72 | |||
| f515a00748 | |||
| eb40cab148 | |||
| 739324df92 | |||
| a840f3f3d6 | |||
| 36897a543d | |||
| 161a4a3164 | |||
| 6920f115fc | |||
| c3ae074b0e | |||
| 17013e425e | |||
| e5934da311 | |||
| 4c8d7df432 | |||
| 94a18eac26 | |||
| 0b76292a1f | |||
| 747aae7774 | |||
| 95d04865b6 | |||
| 92401c5f6d | |||
| 3cd3ab43e4 | |||
| 02172cd3cf | |||
| 388891aa55 | |||
| a6c7ddbb34 | |||
| 98797b25cf | |||
| 0a0ce21db9 | |||
| c1563bf348 | |||
| f496e54902 | |||
|  | 4720d618ae | ||
| 0fe44e3a8b | |||
| ef2a2412ff | |||
| 149270cfb1 | |||
| 273d1906e1 | |||
|  | a28eebd24f | ||
|  | 2fb4aa7a7d | ||
| 870d0e90bd | |||
| c2e4b1331c | |||
| 6be46457dd | |||
| b099d2b28c | |||
| e83e621d6c | |||
|  | c401d92d7e | ||
|  | ec2163ee6a | ||
| 0627c79441 | |||
| f3efd6f932 | |||
|  | 45cf064f13 | ||
|  | 25b0104686 | ||
| aa31825452 | |||
| b130423331 | |||
| fc9e687e8d | |||
| a1ac03e295 | |||
| 56bb9289f6 | |||
| 8da5c3d901 | |||
| 6dd12b13cd | |||
| 59f910fe3f | |||
| 93b6195542 | |||
|  | 029f6e7795 | ||
|  | 19eb6aefbe | ||
|  | 26b35fa847 | ||
|  | ec92a006c3 | ||
|  | 622b3cbdfe | ||
| 6be9b3fd57 | |||
|  | 1991f762ff | ||
|  | 7ef07f63fb | ||
| 9aace44d90 | |||
| a7e7286d6e | |||
| f407a90461 | |||
|  | 9416bec1d7 | ||
|  | 104c9a0747 | ||
|  | b986324ca8 | ||
|  | 34b7a0d308 | ||
|  | 10c372b1e3 | ||
|  | af1f94f029 | ||
| 43236beb53 | |||
|  | 1f97131fc1 | ||
|  | a7195c6042 | ||
|  | 8e77024084 | ||
| dfd1f1720d | |||
| 5531e40958 | |||
| 267995206a | |||
| a2fbb58011 | |||
| 3d79b690e4 | |||
|  | 5f205a48c2 | ||
|  | 7de26a6d71 | ||
|  | 97ca7a2f35 | ||
|  | 734650a80a | ||
|  | 0d269dba16 | ||
|  | 8f2e2d2372 | ||
| 7a84f381fc | |||
| 698ad1803d | |||
|  | 896b46b2f4 | ||
|  | 16c3c01730 | ||
|  | 26f6048226 | ||
|  | 69bc4e5e49 | ||
|  | 8c691f457a | ||
|  | ea79df8fbf | ||
|  | bfc5062bb6 | ||
|  | 2df4be1363 | ||
|  | 4b69efc799 | ||
|  | 9898d8265c | ||
|  | 509a3f9918 | ||
|  | 93bdded413 | ||
|  | f6fe0ddb84 | ||
|  | 803f73b8b8 | ||
| bced319f32 | |||
|  | a798e65465 | ||
| d36de346ad | |||
| b7f88d78b5 | |||
| 71f6ac0f46 | |||
| 561afaf18c | |||
| f0dc2d521d | |||
| 4586c00f4e | |||
|  | 162045b8d7 | ||
| fc1f1b328b | |||
|  | 4be1dd48ce | ||
| 8bbc8afb15 | |||
| 6faef6e0ac | |||
| 29516dc3d8 | |||
|  | a2f24f4591 | ||
| 8f34b7a6fa | |||
| 5410671050 | |||
| e053da240d | |||
| d0e26ddb24 | |||
| 2efddce7c5 | |||
| 3d8a9cfa9a | |||
| 782b05c59e | |||
| 67adbe7089 | |||
| 5399368853 | |||
| ec62dc7950 | |||
| f20db9aa1b | |||
| b21cbda697 | |||
| ada5f02f08 | |||
|  | c387334fa5 | ||
|  | 57711572f6 | ||
| a83dcb3ed5 | |||
| a70a0e914b | |||
| 46b331a413 | |||
| b8e4f0929a | |||
| 85aebac63d | |||
|  | 0254963dec | ||
|  | 0b3995a7e3 | ||
| 7414d45aa4 | |||
| ee0cf26f5b | |||
|  | 658b1fa08c | ||
|  | fc33441151 | ||
| 0bb9971c38 | |||
| 1530197670 | |||
| 2c575d6596 | |||
|  | 5648d1d005 | ||
|  | d97d0fc259 | ||
| f5adcca761 | |||
| 6d3581ac49 | |||
| 94be83c704 | |||
| fe773352f5 | |||
| 311fb3ff98 | |||
| 260db819e7 | |||
| ba5c904cb7 | |||
| f616baa7b2 | |||
|  | d1ad137626 | ||
| 0335b240b6 | |||
|  | 7edffe7e56 | ||
| f218f59184 | |||
| 1b190f8a81 | |||
| f7f4206afa | |||
|  | ca67f392b5 | ||
|  | 3ce504e445 | ||
|  | 58abb0d562 | ||
| 2cf1b51843 | |||
| d8ae11352e | |||
| 7078ef0677 | |||
| b2c0121005 | |||
| cf95fb9600 | |||
| 3c27e38073 | |||
|  | 86f1713639 | ||
| 3dbd760954 | |||
| 8b290acc50 | |||
| b960c361a9 | |||
|  | 0c87ddac9e | 
| @@ -4,3 +4,5 @@ updates: | ||||
|     directory: "/" | ||||
|     schedule: | ||||
|       interval: "weekly" | ||||
|     commit-message: | ||||
|       prefix: "ci" | ||||
| @@ -1,14 +1,27 @@ | ||||
| name: "Build and populate cache" | ||||
| name: "CI" | ||||
| on: | ||||
|   pull_request: | ||||
|   push: | ||||
|   schedule: | ||||
|     # 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:  '50 6 * * *' | ||||
| jobs: | ||||
|   tests: | ||||
| 
 | ||||
|   checks: | ||||
|     strategy: | ||||
|       matrix: | ||||
|         check: | ||||
|           # - nixpkgs-fmt | ||||
|           # - deadnix | ||||
|           - nur | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout repository | ||||
|         uses: https://gitea.com/actions/checkout@v3 | ||||
|       - name: Install nix | ||||
|         uses: https://github.com/cachix/install-nix-action@v24 | ||||
|       - name: Check ${{ matrix.check }} | ||||
|         # Depends on nixos/nix#7759 to simply `nix flake check` | ||||
|         run: nix run .#checks.$(nix eval --raw --impure --expr "builtins.currentSystem").${{ matrix.check }} | ||||
| 
 | ||||
|   build-and-update: | ||||
|     strategy: | ||||
|       matrix: | ||||
|         # Set this to notify the global nur package registry that changes are | ||||
| @@ -28,30 +41,22 @@ jobs: | ||||
|         # in your repository settings in Github found at https://github.com/<your_githubname>/nur-packages/settings/secrets | ||||
|         cachixName: | ||||
|           - xeals | ||||
|         nixPath: | ||||
|           - nixpkgs=channel:nixos-unstable | ||||
|           - nixpkgs=channel:nixpkgs-unstable | ||||
|           # Disable due to buildGoModule and buildRustPackage | ||||
|           # - nixpkgs=channel:nixos-20.03 | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - name: Checkout repository | ||||
|       uses: actions/checkout@v2.3.4 | ||||
|       uses: https://gitea.com/actions/checkout@v3 | ||||
|     - name: Install nix | ||||
|       uses: cachix/install-nix-action@v12 | ||||
|       with: | ||||
|         nix_path: "${{ matrix.nixPath }}" | ||||
|       uses: https://github.com/cachix/install-nix-action@v24 | ||||
|     - name: Show nixpkgs version | ||||
|       run: nix-instantiate --eval -E '(import <nixpkgs> {}).lib.version' | ||||
|       run: nix eval --impure --expr '(import ./flake-compat.nix { src = ./.; }).lib.version' | ||||
|     - name: Setup cachix | ||||
|       uses: cachix/cachix-action@v8 | ||||
|       uses: https://github.com/cachix/cachix-action@v12 | ||||
|       if: ${{ matrix.cachixName != '<YOUR_CACHIX_NAME>' }} | ||||
|       with: | ||||
|         name: ${{ matrix.cachixName }} | ||||
|         signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' | ||||
|     - name: Build nix packages | ||||
|       # TODO switch to default nixpkgs channel once nix-build-uncached 1.0.0 is in stable | ||||
|       run: nix run -I 'nixpkgs=channel:nixos-unstable' nixpkgs.nix-build-uncached -c nix-build-uncached ci.nix -A cacheOutputs | ||||
|       run: nix develop .#ci -c nix-build-uncached ci.nix -A cacheOutputs | ||||
|     - name: Trigger NUR update | ||||
|       if: ${{ matrix.nurRepo != '<YOUR_REPO_NAME>' }} | ||||
|       run: curl -XPOST "https://nur-update.herokuapp.com/update?repo=${{ matrix.nurRepo }}" | ||||
|       run: curl -XPOST "https://nur-update.nix-community.org/update?repo=${{ matrix.nurRepo }}" | ||||
							
								
								
									
										24
									
								
								.gitea/workflows/update.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								.gitea/workflows/update.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| name: "Update flake inputs" | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   schedule: | ||||
|     # bump weekly at 6:50 | ||||
|     - cron:  '50 6 * * 1' | ||||
| jobs: | ||||
|   update-flake: | ||||
|     runs-on: ubuntu-latest | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|     steps: | ||||
|       - name: Checkout repository | ||||
|         uses: actions/checkout@v4 | ||||
|       - uses: cachix/install-nix-action@v23 | ||||
|         with: | ||||
|           extra_nix_config: | | ||||
|             access-tokens = github.com=${{ secrets.INPUT_GITHUB_ACCESS_TOKEN }} | ||||
|       - name: "flake: update inputs" | ||||
|         uses: DeterminateSystems/update-flake-lock@v20 | ||||
|         with: | ||||
|           pr-title: "flake: update inputs" | ||||
|           pr-labels: dependencies | ||||
|           commit-msg: "flake: update inputs" | ||||
							
								
								
									
										28
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								.travis.yml
									
									
									
									
									
								
							| @@ -1,28 +0,0 @@ | ||||
| version: ~> 1.0 | ||||
| import: nix-community/nix-travis-ci:nix.yml@main | ||||
|  | ||||
| dist: xenial | ||||
| os: linux | ||||
|  | ||||
| env: | ||||
|   global: | ||||
|     - CACHIX_CACHE="xeals" | ||||
|     - 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 | ||||
|  | ||||
| script: | ||||
|  - nix-build ci.nix -kA buildOutputs | ||||
|  - nix eval -f default.nix 'lib' | ||||
|  - nix eval -f default.nix 'modules' | ||||
|  - nix eval -f default.nix 'overlays' | ||||
|  | ||||
| after_success: | ||||
|   - if [ -n "${CACHIX_CACHE}" ]; then nix-build ci.nix -kA cacheOutputs | cachix push "${CACHIX_CACHE}"; fi | ||||
|   - 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 | ||||
|  | ||||
							
								
								
									
										52
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								README.md
									
									
									
									
									
								
							| @@ -2,44 +2,26 @@ | ||||
|  | ||||
| **My personal [NUR](https://github.com/nix-community/NUR) repository** | ||||
|  | ||||
| [](https://github.com/xeals/nur-packages/actions) [](https://xeals.cachix.org) | ||||
| [CI](https://git.xeals.me/xeals/nur-packages/actions) [](https://xeals.cachix.org) | ||||
|  | ||||
| ## Noteworthy packages | ||||
| ## Using | ||||
|  | ||||
| ### Jetbrains with plugins | ||||
|  | ||||
| A fan of the Emacs/Vim/VSCode plugin builder? Now enjoy it with your favourite Jetbrains IDE! | ||||
|  | ||||
| The system is mostly proof-of-concept and there are a couple of issues with it at the moment, but it works for what is available in the repo. | ||||
|  | ||||
| #### Using | ||||
| Using packages is easier through the combined [NUR](https://github.com/nix-community/NUR) flake. | ||||
|  | ||||
| ```nix | ||||
| { pkgs ? import <nixpkgs> {} }: | ||||
| let | ||||
|   xeals = import (builtins.fetchTarball "https://git.xeal.me/xeals/nur-packages/archive/master.tar.gz") { | ||||
|     inherit pkgs; | ||||
| # flake.nix | ||||
| { | ||||
|   inputs = { | ||||
|     xeals.url = "git+https://git.xeal.me/xeals/nur-packages"; # Direct | ||||
|     xeals.url = "github:xeals/nur-packages"; # GitHub mirror | ||||
|   }; | ||||
| in | ||||
|   # e.g., for IntelliJ IDEA | ||||
|   xeals.jetbrains.ideaCommunityWithPlugins (jpkgs: [ | ||||
|     jpkgs.ideavim | ||||
|     jpkgs.checkstyle-idea | ||||
|   ]) | ||||
|    | ||||
|   outputs = { nixpkgs, xeals, ... }: { | ||||
|     nixosConfigurations.foo = nixpkgs.lib.nixosSystem { | ||||
|       modules = [ | ||||
|         xeals.nixosModules.betanin | ||||
|       ]; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| ``` | ||||
|  | ||||
| #### Issues | ||||
|  | ||||
| - [ ] The plugin derivation overrides the base instead of extending it; this is really only an issue for the open-source IDEs, and only once they're actually built from source (instead of repackaging the JARs) | ||||
| - [ ] Plugins must be manually added to the repo; long-term, I'd really want some way to scrape them, or at least have a script to add and update | ||||
|  | ||||
| ### spotify-ripper | ||||
|  | ||||
| `spotify-ripper` is pretty flexible in the formats it supports, so the derivation allows you to customize which support packages to build with. | ||||
|  | ||||
| The default package comes with nothing (which is not entirely useful -- this will probably change at some point). See [the builder](./pkgs/tools/misc/spotify-ripper/default.nix) for options. | ||||
|  | ||||
| ## 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 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 | ||||
|   | ||||
| @@ -7,7 +7,6 @@ import re | ||||
| import requests | ||||
| import subprocess as sp | ||||
| import sys | ||||
| import unicodedata | ||||
| import urllib | ||||
| 
 | ||||
| from lxml import etree | ||||
| @@ -28,15 +27,10 @@ PRODUCT_CODE = { | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 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 | ||||
| 
 | ||||
| 
 | ||||
| @@ -65,15 +59,18 @@ class Build: | ||||
|         return self.code + "-" + self.version | ||||
| 
 | ||||
| 
 | ||||
| PACKAGE_RE = re.compile("[^0-9A-Za-z._-]") | ||||
| HTML_RE = re.compile("<[^>]+/?>") | ||||
| 
 | ||||
| 
 | ||||
| class Plugin: | ||||
|     def __init__(self, data, build, category=None): | ||||
|         self.build = build | ||||
|     def __init__(self, data, category=None): | ||||
|         self.category = category | ||||
|         self.name = data.find("name").text | ||||
|         self.xml_id = data.find("id").text | ||||
|         self.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.version = data.find("version").text | ||||
|         self.slug = to_slug(self.name) | ||||
|         self.orig_slug = self.slug | ||||
| 
 | ||||
| @@ -87,7 +84,7 @@ class Plugin: | ||||
|     def description(self): | ||||
|         return re.sub(HTML_RE, "", self._description or "").strip() | ||||
| 
 | ||||
|     def get_download_url(self, deref=True): | ||||
|     def download_url(self, build, deref=True): | ||||
|         """ | ||||
|         Provides the ZIP download URL for this plugin. | ||||
| 
 | ||||
| @@ -97,52 +94,18 @@ class Plugin: | ||||
|         (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}" | ||||
|         id = urllib.parse.quote(self.id) | ||||
|         url = f"https://plugins.jetbrains.com/pluginManager?action=download&id={id}&build={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": | ||||
| @@ -165,16 +128,16 @@ def list_plugins(build): | ||||
|     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) | ||||
|     return parse_repository(resp.content) | ||||
| 
 | ||||
| 
 | ||||
| def parse_repository(content, build): | ||||
| def parse_repository(content): | ||||
|     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)) | ||||
|             plugins.append(Plugin(plugin, cat_name)) | ||||
|     return plugins | ||||
| 
 | ||||
| 
 | ||||
| @@ -192,101 +155,28 @@ def deduplicate(plugins): | ||||
| 
 | ||||
| def prefetch(plugin, build, url=None): | ||||
|     if not url: | ||||
|         url = plugin.download_url or plugin.get_download_url() | ||||
|         url = plugin.download_url(build) | ||||
|     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() | ||||
|         raise IOError(f"nix-prefetch-url {plugin} failed: {res.stderr.decode('utf-8')}") | ||||
|     return res.stdout.decode("utf-8").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 "" | ||||
| def write_packages(outfile, plugins, build): | ||||
|     builder = build.builder() | ||||
|     outfile.write("{callPackage}:\n{") | ||||
| 
 | ||||
|     for i, plugin in enumerate(plugins): | ||||
|         print(f"{i:04} {plugin.packagename()}") | ||||
|     for plugin in plugins: | ||||
|         src_url = plugin.download_url(build, deref=True) | ||||
|         src_ext = os.path.splitext(src_url)[-1] | ||||
| 
 | ||||
|         try: | ||||
|             plugin.fetch_external() | ||||
|             sha = prefetch(plugin, build, src_url) | ||||
|         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": | ||||
| @@ -296,7 +186,7 @@ def write_packages(outfile, plugins): | ||||
|         # 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 | ||||
|         license = "lib.licenses.free" | ||||
| 
 | ||||
|         call_args = [str(builder), "fetchurl", "lib"] | ||||
|         for binput in build_inputs: | ||||
| @@ -307,7 +197,7 @@ def write_packages(outfile, plugins): | ||||
|   {plugin.packagename()} = callPackage ({{ {", ".join(sorted(call_args))} }}: {builder} {{ | ||||
|     pname = "{plugin.slug}"; | ||||
|     plugname = "{plugin.name}"; | ||||
|     plugid = "{plugin.xml_id}"; | ||||
|     plugid = "{plugin.id}"; | ||||
|     version = "{plugin.version}"; | ||||
|     src = fetchurl {{ | ||||
|       url = "{src_url}"; | ||||
| @@ -337,7 +227,6 @@ def main(): | ||||
|     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", | ||||
| @@ -352,17 +241,15 @@ def main(): | ||||
|     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) | ||||
|         write_packages(sys.stdout, plugins, build) | ||||
|     else: | ||||
|         with open(args.out, "w") as f: | ||||
|             write_packages(f, plugins) | ||||
|             write_packages(f, plugins, build) | ||||
| 
 | ||||
| 
 | ||||
| main() | ||||
							
								
								
									
										6
									
								
								ci.nix
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								ci.nix
									
									
									
									
									
								
							| @@ -9,7 +9,7 @@ | ||||
| # then your CI will be able to build and cache only those packages for | ||||
| # which this is possible. | ||||
|  | ||||
| { pkgs ? import <nixpkgs> {} }: | ||||
| { pkgs ? import ./flake-compat.nix { src = ./.; } }: | ||||
|  | ||||
| with builtins; | ||||
|  | ||||
| @@ -29,8 +29,8 @@ let | ||||
|     let | ||||
|       f = p: | ||||
|         if shouldRecurseForDerivations p then flattenPkgs p | ||||
|         else if isDerivation p then [p] | ||||
|         else []; | ||||
|         else if isDerivation p then [ p ] | ||||
|         else [ ]; | ||||
|     in | ||||
|     concatMap f (attrValues s); | ||||
|  | ||||
|   | ||||
| @@ -7,9 +7,11 @@ | ||||
| #     nix-build -A mypackage | ||||
|  | ||||
| { pkgs ? import <nixpkgs> { } }: | ||||
|  | ||||
| import ./pkgs/top-level/all-packages.nix { inherit pkgs; } | ||||
|   // { | ||||
| let | ||||
|   system = pkgs.stdenv.hostPlatform.system; | ||||
|   packages = import ./pkgs/top-level { localSystem = system; inherit pkgs; }; | ||||
| in | ||||
| packages // { | ||||
|   # The `lib`, `modules`, and `overlay` names are special | ||||
|   lib = import ./lib { inherit pkgs; }; # functions | ||||
|   modules = import ./modules; # NixOS modules | ||||
|   | ||||
							
								
								
									
										12
									
								
								flake-compat.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								flake-compat.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| { src, system ? builtins.currentSystem or "unknown-system" }: | ||||
|  | ||||
| let | ||||
|   lockFilePath = "${src}/flake.lock"; | ||||
|   lockFile = builtins.fromJSON (builtins.readFile lockFilePath); | ||||
|   nixpkgs = lockFile.nodes.nixpkgs.locked; | ||||
|   tarball = fetchTarball { | ||||
|     url = "https://github.com/${nixpkgs.owner}/${nixpkgs.repo}/archive/${nixpkgs.rev}.zip"; | ||||
|     sha256 = nixpkgs.narHash; | ||||
|   }; | ||||
| in | ||||
| import tarball { inherit system; } | ||||
							
								
								
									
										30
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										30
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							| @@ -1,12 +1,15 @@ | ||||
| { | ||||
|   "nodes": { | ||||
|     "flake-utils": { | ||||
|       "inputs": { | ||||
|         "systems": "systems" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1605370193, | ||||
|         "narHash": "sha256-YyMTf3URDL/otKdKgtoMChu4vfVL3vCMkRqpGifhUn0=", | ||||
|         "lastModified": 1731533236, | ||||
|         "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", | ||||
|         "owner": "numtide", | ||||
|         "repo": "flake-utils", | ||||
|         "rev": "5021eac20303a61fafe17224c087f5519baed54d", | ||||
|         "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
| @@ -17,11 +20,11 @@ | ||||
|     }, | ||||
|     "nixpkgs": { | ||||
|       "locked": { | ||||
|         "lastModified": 1611414562, | ||||
|         "narHash": "sha256-u002KfYA7Uk3vffnnmLz88BmxOzixYFdh+8II6ZT+Kg=", | ||||
|         "lastModified": 1739667012, | ||||
|         "narHash": "sha256-6QWdUgz2O2Mm+pYx/AYB4Rot5/s1OR1C6bt30TI81yY=", | ||||
|         "owner": "NixOS", | ||||
|         "repo": "nixpkgs", | ||||
|         "rev": "9d6fd2ba135c5b5c85c3332604d39b43e93b8298", | ||||
|         "rev": "1dcdd535fef84d4671129a10e7072d56dca9a4d3", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
| @@ -36,6 +39,21 @@ | ||||
|         "flake-utils": "flake-utils", | ||||
|         "nixpkgs": "nixpkgs" | ||||
|       } | ||||
|     }, | ||||
|     "systems": { | ||||
|       "locked": { | ||||
|         "lastModified": 1681028828, | ||||
|         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", | ||||
|         "owner": "nix-systems", | ||||
|         "repo": "default", | ||||
|         "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "nix-systems", | ||||
|         "repo": "default", | ||||
|         "type": "github" | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   "root": "root", | ||||
|   | ||||
							
								
								
									
										80
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										80
									
								
								flake.nix
									
									
									
									
									
								
							| @@ -1,47 +1,57 @@ | ||||
| { | ||||
|   description = "xeals's flake"; | ||||
|   description = "xeals's Nix repository"; | ||||
|  | ||||
|   inputs = { | ||||
|     nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; | ||||
|     flake-utils.url = "github:numtide/flake-utils"; | ||||
|   }; | ||||
|   inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; | ||||
|   inputs.flake-utils.url = "github:numtide/flake-utils"; | ||||
|  | ||||
|   outputs = { self, nixpkgs, flake-utils }: | ||||
|     flake-utils.lib.eachDefaultSystem | ||||
|       (system: | ||||
|         let | ||||
|       inherit (flake-utils.lib) eachDefaultSystem flattenTree; | ||||
|       inherit (nixpkgs.lib.attrsets) filterAttrs mapAttrs; | ||||
|           pkgs = import nixpkgs { inherit system; }; | ||||
|         in | ||||
|         { | ||||
|       nixosModules = mapAttrs (_: path: import path) (import ./modules); | ||||
|           packages = import ./pkgs/top-level { localSystem = system; inherit pkgs; }; | ||||
|  | ||||
|           formatter = pkgs.writeShellScriptBin "nur-packages-fmt" '' | ||||
|             ${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt . | ||||
|             ${pkgs.deadnix}/bin/deadnix -e . | ||||
|           ''; | ||||
|  | ||||
|           checks = { | ||||
|             # Ensures that the NUR bot can evaluate and find all our packages. | ||||
|             # Normally we'd also run with `--option restrict-eval true`, but | ||||
|             # this is incompatible with flakes because reasons. | ||||
|             nur = pkgs.writeShellScriptBin "nur-check" '' | ||||
|               # Prefer nixpkgs channel (actual build), otherwise read from flake.lock (CI) | ||||
|               if ! nixpkgs=$(nix-instantiate --find-file nixpkgs 2>/dev/null); then | ||||
|                 _rev=$(${pkgs.jq}/bin/jq -r .nodes.nixpkgs.locked.rev flake.lock) | ||||
|                 nixpkgs="https://github.com/nixos/nixpkgs/archive/''${_rev}.tar.gz" | ||||
|               fi | ||||
|               nix-env -f . -qa \* --meta \ | ||||
|                 --allowed-uris https://static.rust-lang.org \ | ||||
|                 --option allow-import-from-derivation true \ | ||||
|                 --drv-path --show-trace \ | ||||
|                 -I nixpkgs="$nixpkgs" \ | ||||
|                 -I ./ \ | ||||
|                 --json | ${pkgs.jq}/bin/jq -r 'values | .[].name' | ||||
|             ''; | ||||
|           }; | ||||
|  | ||||
|           devShells.ci = pkgs.mkShellNoCC { | ||||
|             buildInputs = [ pkgs.nix-build-uncached ]; | ||||
|           }; | ||||
|         }) | ||||
|     // { | ||||
|       nixosModules = nixpkgs.lib.mapAttrs (_: path: import path) (import ./modules) // { | ||||
|         default = { | ||||
|           imports = nixpkgs.lib.attrValues self.nixosModules; | ||||
|         }; | ||||
|       }; | ||||
|  | ||||
|       overlays = import ./overlays // { | ||||
|         pkgs = final: prev: import ./pkgs/top-level/all-packages.nix { pkgs = prev; }; | ||||
|         pkgs = _: prev: import ./pkgs/top-level/all-packages.nix { pkgs = prev; }; | ||||
|         default = _: _: { xeals = nixpkgs.lib.composeExtensions self.overlays.pkgs; }; | ||||
|       }; | ||||
|  | ||||
|       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"; }; | ||||
|         }; | ||||
|       }); | ||||
| } | ||||
|   | ||||
| @@ -2,6 +2,10 @@ | ||||
|   amdgpu-common = ./services/hardware/amdgpu-common.nix; | ||||
|   amdgpu-fan = ./services/hardware/amdgpu-fan.nix; | ||||
|   amdgpu-pwm = ./services/hardware/amdgpu-pwm.nix; | ||||
|   betanin = ./services/web-apps/betanin.nix; | ||||
|   dunst = ./services/x11/dunst.nix; | ||||
|   koillection = ./services/web-apps/koillection.nix; | ||||
|   porkbun-ddns = ./services/networking/porkbun-ddns.nix; | ||||
|   radeon-profile-daemon = ./services/hardware/radeon-profile-daemon.nix; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| { config, lib, pkgs, ... }: | ||||
| { lib, ... }: | ||||
|  | ||||
| with lib; | ||||
|  | ||||
| @@ -7,7 +7,7 @@ with lib; | ||||
|     cards = mkOption { | ||||
|       type = types.listOf types.str; | ||||
|       default = [ "card0" ]; | ||||
|       example = literalExample ''[ "card0" ]''; | ||||
|       example = [ "card0" "card1" ]; | ||||
|       description = '' | ||||
|         A list of cards to enable fan configuration for. The identifiers for | ||||
|         each device can be found in /sys/class/drm/ as card0, card1, etc. | ||||
|   | ||||
| @@ -33,14 +33,12 @@ in | ||||
|         [ 75 89 ] | ||||
|         [ 80 100 ] | ||||
|       ]; | ||||
|       example = literalExample '' | ||||
|         [ | ||||
|       example = [ | ||||
|         [ 0 0 ] | ||||
|         [ 40 30 ] | ||||
|         [ 60 50 ] | ||||
|         [ 80 100 ] | ||||
|         ] | ||||
|       ''; | ||||
|       ]; | ||||
|       description = '' | ||||
|         A list of temperature-fan speed pairs. The temperature is specified in | ||||
|         degrees celcius, and speed is specified in %. | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| { config, lib, pkgs, ... }: | ||||
| { config, lib, ... }: | ||||
|  | ||||
| with lib; | ||||
|  | ||||
|   | ||||
							
								
								
									
										74
									
								
								modules/services/networking/porkbun-ddns.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								modules/services/networking/porkbun-ddns.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | ||||
| { config, lib, pkgs, ... }: | ||||
| let | ||||
|   inherit (lib) mkOption types; | ||||
|  | ||||
|   cfg = config.services.porkbun-ddns; | ||||
| in | ||||
| { | ||||
|   options = { | ||||
|     services.porkbun-ddns = { | ||||
|       enable = lib.mkEnableOption "Porkbun dynamic DNS client"; | ||||
|  | ||||
|       package = mkOption { | ||||
|         # TODO: How do I use mkPackageOption when the package isn't in the | ||||
|         #  package set? | ||||
|         type = types.package; | ||||
|         default = pkgs.callPackage ../../../pkgs/by-name/po/porkbun-ddns/package.nix { }; | ||||
|         defaultText = "pkgs.porkbun-ddns"; | ||||
|         description = lib.mdDoc "The porkbun-ddns package to use."; | ||||
|       }; | ||||
|  | ||||
|       interval = mkOption { | ||||
|         type = types.str; | ||||
|         default = "10m"; | ||||
|         description = lib.mdDoc '' | ||||
|           Interval to update dynamic DNS records. The default is to update every | ||||
|           10 minutes. The format is described in {manpage}`systemd.time(7)`. | ||||
|         ''; | ||||
|       }; | ||||
|  | ||||
|       domains = mkOption { | ||||
|         type = types.listOf types.str; | ||||
|         default = [ ]; | ||||
|         description = lib.mdDoc "Domains to update."; | ||||
|       }; | ||||
|  | ||||
|       apiKeyFile = mkOption { | ||||
|         type = types.nullOr types.path; | ||||
|         description = lib.mdDoc '' | ||||
|           File containing the API key to use when running the client. | ||||
|         ''; | ||||
|       }; | ||||
|  | ||||
|       secretApiKeyFile = mkOption { | ||||
|         type = types.nullOr types.path; | ||||
|         description = lib.mdDoc '' | ||||
|           File containing the secret API key to use when running the | ||||
|           client. | ||||
|         ''; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
|  | ||||
|   config = lib.mkIf cfg.enable { | ||||
|     systemd.services.porkbun-ddns = { | ||||
|       description = "Porkbun dynamic DNS client"; | ||||
|       script = '' | ||||
|         ${cfg.package}/bin/porkbun-ddns \ | ||||
|           -K ${cfg.apiKeyFile} \ | ||||
|           -S ${cfg.secretApiKeyFile} \ | ||||
|           ${lib.concatStringsSep " " cfg.domains} | ||||
|       ''; | ||||
|     }; | ||||
|  | ||||
|     systemd.timers.porkbun-ddns = { | ||||
|       description = "Porkbun dynamic DNS client"; | ||||
|       wants = [ "network-online.target" ]; | ||||
|       wantedBy = [ "timers.target" ]; | ||||
|       timerConfig = { | ||||
|         OnBootSec = cfg.interval; | ||||
|         OnUnitActiveSec = cfg.interval; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										167
									
								
								modules/services/web-apps/betanin.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								modules/services/web-apps/betanin.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,167 @@ | ||||
| { config, lib, pkgs, ... }: | ||||
|  | ||||
| let | ||||
|   inherit (builtins) hashString; | ||||
|   inherit (lib) mkIf mkOption optionalAttrs types; | ||||
|  | ||||
|   cfg = config.services.betanin; | ||||
|  | ||||
|   settingsFormat = pkgs.formats.toml { }; | ||||
|   beetsFormat = pkgs.formats.yaml { }; | ||||
| in | ||||
| { | ||||
|   options.services.betanin = { | ||||
|     enable = lib.mkEnableOption "betanin"; | ||||
|  | ||||
|     package = mkOption { | ||||
|       description = "Package containing betanin program."; | ||||
|       type = types.package; | ||||
|       default = pkgs.betanin or (import ../../.. { inherit pkgs; }).betanin; | ||||
|     }; | ||||
|  | ||||
|     openFirewall = mkOption { | ||||
|       description = "Open ports in the firewall for the server."; | ||||
|       type = types.bool; | ||||
|       default = false; | ||||
|     }; | ||||
|  | ||||
|     port = mkOption { | ||||
|       description = "Port to access betanin on."; | ||||
|       type = types.port; | ||||
|       default = 9393; | ||||
|     }; | ||||
|  | ||||
|     user = mkOption { | ||||
|       description = "User that the betanin program should run under."; | ||||
|       type = types.str; | ||||
|       default = "betanin"; | ||||
|     }; | ||||
|  | ||||
|     group = mkOption { | ||||
|       description = "Group that the betanin program should run under."; | ||||
|       type = types.str; | ||||
|       default = "betanin"; | ||||
|     }; | ||||
|  | ||||
|     dataDir = mkOption { | ||||
|       description = "Directory to store application data."; | ||||
|       type = types.str; | ||||
|       default = "/var/lib/betanin"; | ||||
|     }; | ||||
|  | ||||
|     settings = mkOption { | ||||
|       type = settingsFormat.type; | ||||
|       default = { }; | ||||
|       example = lib.literalExpression '' | ||||
|         { | ||||
|           frontend = { | ||||
|             username = "foo"; | ||||
|             password = { _secret = "/run/secrets/betaninPasswordFile"; }; | ||||
|           }; | ||||
|           clients = { | ||||
|             api_key = { _secret = "/run/secrets/betaninApiKeyFile"; }; | ||||
|           }; | ||||
|           server = { | ||||
|             num_parallel_jobs = 1; | ||||
|           }; | ||||
|         } | ||||
|       ''; | ||||
|       description = '' | ||||
|         Configuration for betanin. | ||||
|  | ||||
|         Options containing secret data should be set to an attribute set | ||||
|         containing the attribute `_secret` - a string pointing to a file | ||||
|         containing the value the option should be set to. | ||||
|       ''; | ||||
|     }; | ||||
|  | ||||
|     beets.settings = mkOption { | ||||
|       type = beetsFormat.type; | ||||
|       default = { }; | ||||
|       description = "Configuration for beets used by betanin."; | ||||
|     }; | ||||
|   }; | ||||
|  | ||||
|   config = mkIf cfg.enable { | ||||
|     services.betanin.settings = { | ||||
|       notifications = { | ||||
|         # Required to exist. | ||||
|         services = { }; | ||||
|         strings = { | ||||
|           title = lib.mkDefault "[betanin] torrent `$name` $status"; | ||||
|           body = lib.mkDefault "@ $time. view/use the console at http://127.0.0.1:${toString cfg.port}/$console_path"; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|  | ||||
|     networking.firewall = mkIf cfg.openFirewall { | ||||
|       allowedTCPPorts = [ cfg.port ]; | ||||
|     }; | ||||
|  | ||||
|     systemd.services.betanin = | ||||
|       let | ||||
|         isSecret = v: lib.isAttrs v && v ? _secret && lib.isString v._secret; | ||||
|         sanitisedConfig = lib.mapAttrsRecursiveCond | ||||
|           (as: !isSecret as) | ||||
|           (_: v: if isSecret v then hashString "sha256" v._secret else v) | ||||
|           cfg.settings; | ||||
|         settingsFile = settingsFormat.generate "betanin.toml" sanitisedConfig; | ||||
|  | ||||
|         secretPaths = lib.catAttrs "_secret" (lib.collect isSecret cfg.settings); | ||||
|         mkSecretReplacement = file: '' | ||||
|           replace-secret ${hashString "sha256" file} ${file} "${cfg.dataDir}/.config/betanin/config.toml" | ||||
|         ''; | ||||
|         secretReplacements = lib.concatMapStrings mkSecretReplacement secretPaths; | ||||
|  | ||||
|         beetsFile = beetsFormat.generate "betanin-beets.yaml" cfg.beets.settings; | ||||
|       in | ||||
|       { | ||||
|         description = "Betanin service"; | ||||
|         wantedBy = [ "multi-user.target" ]; | ||||
|         after = [ "network.target" ]; | ||||
|         path = [ pkgs.replace-secret ]; | ||||
|  | ||||
|         environment = { | ||||
|           HOME = cfg.dataDir; | ||||
|         }; | ||||
|  | ||||
|         script = '' | ||||
|           ln -sf ${beetsFile} ${cfg.dataDir}/.config/beets/config.yaml | ||||
|           cat ${settingsFile} > ${cfg.dataDir}/.config/betanin/config.toml | ||||
|           ${secretReplacements} | ||||
|  | ||||
|           ${cfg.package}/bin/betanin --port ${toString cfg.port} | ||||
|         ''; | ||||
|  | ||||
|         serviceConfig = { | ||||
|           User = cfg.user; | ||||
|           Group = cfg.group; | ||||
|           PrivateTmp = true; | ||||
|           Restart = "always"; | ||||
|           WorkingDirectory = cfg.dataDir; | ||||
|           StateDirectory = mkIf (cfg.dataDir == "/var/lib/betanin") "betanin"; | ||||
|         }; | ||||
|       }; | ||||
|  | ||||
|     systemd.tmpfiles.rules = [ | ||||
|       "d ${cfg.dataDir}                            0710 ${cfg.user} ${cfg.group} - -" | ||||
|       "d ${cfg.dataDir}/.config                    0750 ${cfg.user} ${cfg.group} - -" | ||||
|       "d ${cfg.dataDir}/.config/betanin            0750 ${cfg.user} ${cfg.group} - -" | ||||
|       "d ${cfg.dataDir}/.config/beets              0750 ${cfg.user} ${cfg.group} - -" | ||||
|       "d ${cfg.dataDir}/.local                     0750 ${cfg.user} ${cfg.group} - -" | ||||
|       "d ${cfg.dataDir}/.local/share               0750 ${cfg.user} ${cfg.group} - -" | ||||
|       "d ${cfg.dataDir}/.local/share/betanin       0750 ${cfg.user} ${cfg.group} - -" | ||||
|     ]; | ||||
|  | ||||
|     users.users = optionalAttrs (cfg.user == "betanin") { | ||||
|       ${cfg.user} = { | ||||
|         isSystemUser = true; | ||||
|         group = cfg.group; | ||||
|       }; | ||||
|     }; | ||||
|  | ||||
|     users.groups = optionalAttrs (cfg.group == "betanin") { | ||||
|       ${cfg.group} = { }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										318
									
								
								modules/services/web-apps/koillection.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										318
									
								
								modules/services/web-apps/koillection.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,318 @@ | ||||
| { config, lib, modulesPath, options, pkgs, ... }: | ||||
| let | ||||
|   inherit (lib) literalExpression mkEnableOption mkIf mkOption optionalString types; | ||||
|  | ||||
|   opt = options.services.koillection; | ||||
|   cfg = config.services.koillection; | ||||
|   db = cfg.database; | ||||
|  | ||||
|   koillection = (pkgs.koillection or pkgs.callPackage ../../../pkgs/by-name/ko/koillection/package.nix { }).override { | ||||
|     dataDir = cfg.dataDir; | ||||
|   }; | ||||
|   inherit (koillection.passthru) phpPackage; | ||||
| in | ||||
| { | ||||
|   options.services.koillection = { | ||||
|     enable = mkEnableOption "Koillection, a collection manager"; | ||||
|  | ||||
|     user = mkOption { | ||||
|       type = types.str; | ||||
|       default = "koillection"; | ||||
|       description = lib.mdDoc "User Koillection runs as."; | ||||
|     }; | ||||
|  | ||||
|     group = mkOption { | ||||
|       type = types.str; | ||||
|       default = "koillection"; | ||||
|       description = lib.mdDoc "Group Koillection runs as."; | ||||
|     }; | ||||
|  | ||||
|     hostName = lib.mkOption { | ||||
|       type = types.str; | ||||
|       default = config.networking.fqdnOrHostName; | ||||
|       defaultText = "config.networking.fqdnOrHostName"; | ||||
|       example = "koillection.example.com"; | ||||
|       description = lib.mdDoc "The hostname to serve Koillection on."; | ||||
|     }; | ||||
|  | ||||
|     dataDir = mkOption { | ||||
|       description = lib.mdDoc "Koillection data directory"; | ||||
|       default = "/var/lib/koillection"; | ||||
|       type = types.path; | ||||
|     }; | ||||
|  | ||||
|     database = { | ||||
|       host = mkOption { | ||||
|         type = types.str; | ||||
|         default = if db.createLocally then "/run/postgresql" else null; | ||||
|         defaultText = literalExpression '' | ||||
|           if config.${opt.database.createLocally} | ||||
|           then "/run/postgresql" | ||||
|           else null | ||||
|         ''; | ||||
|         example = "192.168.12.85"; | ||||
|         description = lib.mdDoc "Database host address or unix socket."; | ||||
|       }; | ||||
|       port = mkOption { | ||||
|         type = types.port; | ||||
|         default = 5432; | ||||
|         description = lib.mdDoc "Database host port."; | ||||
|       }; | ||||
|       name = mkOption { | ||||
|         type = types.str; | ||||
|         default = "koillection"; | ||||
|         description = lib.mdDoc "Database name."; | ||||
|       }; | ||||
|       user = mkOption { | ||||
|         type = types.str; | ||||
|         default = cfg.user; | ||||
|         defaultText = literalExpression "user"; | ||||
|         description = lib.mdDoc "Database username."; | ||||
|       }; | ||||
|       passwordFile = mkOption { | ||||
|         type = with types; nullOr path; | ||||
|         default = null; | ||||
|         example = "/run/keys/koillection-dbpassword"; | ||||
|         description = lib.mdDoc '' | ||||
|           A file containing the password corresponding to | ||||
|           {option}`database.user`. | ||||
|         ''; | ||||
|       }; | ||||
|       createLocally = mkOption { | ||||
|         type = types.bool; | ||||
|         default = false; | ||||
|         description = lib.mdDoc "Create the database and database user locally."; | ||||
|       }; | ||||
|     }; | ||||
|  | ||||
|     poolConfig = mkOption { | ||||
|       type = with types; attrsOf (oneOf [ str int bool ]); | ||||
|       default = { | ||||
|         "pm" = "dynamic"; | ||||
|         "pm.max_children" = 32; | ||||
|         "pm.start_servers" = 2; | ||||
|         "pm.min_spare_servers" = 2; | ||||
|         "pm.max_spare_servers" = 4; | ||||
|         "pm.max_requests" = 500; | ||||
|       }; | ||||
|       description = lib.mdDoc '' | ||||
|         Options for the bookstack PHP pool. See the documentation on `php-fpm.conf` | ||||
|         for details on configuration directives. | ||||
|       ''; | ||||
|     }; | ||||
|  | ||||
|     nginx = mkOption { | ||||
|       type = types.submodule ( | ||||
|         lib.recursiveUpdate | ||||
|           (import "${modulesPath}/services/web-servers/nginx/vhost-options.nix" { inherit config lib; }) | ||||
|           { } | ||||
|       ); | ||||
|       default = { }; | ||||
|       example = literalExpression '' | ||||
|         { | ||||
|           serverAliases = [ | ||||
|             "koillection.''${config.networking.domain}" | ||||
|           ]; | ||||
|           # To enable encryption and let let's encrypt take care of certificate | ||||
|           forceSSL = true; | ||||
|           enableACME = true; | ||||
|         } | ||||
|       ''; | ||||
|       description = lib.mdDoc '' | ||||
|         With this option, you can customize the nginx virtualHost settings. | ||||
|       ''; | ||||
|     }; | ||||
|  | ||||
|     config = mkOption { | ||||
|       type = with types; | ||||
|         attrsOf | ||||
|           (nullOr | ||||
|             (either | ||||
|               (oneOf [ bool int port path str ]) | ||||
|               (submodule { | ||||
|                 options = { | ||||
|                   _secret = mkOption { | ||||
|                     type = nullOr str; | ||||
|                     description = lib.mdDoc '' | ||||
|                       The path to a file containing the value the option should | ||||
|                       be set to in the final configuration file. | ||||
|                     ''; | ||||
|                   }; | ||||
|                 }; | ||||
|               }))); | ||||
|       default = { }; | ||||
|       example = literalExpression '' | ||||
|       ''; | ||||
|     }; | ||||
|   }; | ||||
|  | ||||
|   config = mkIf cfg.enable { | ||||
|     services.koillection.config = { | ||||
|       APP_ENV = "prod"; | ||||
|       # DB_DRIVER = "pdo_pgsql"; | ||||
|       DB_USER = db.user; | ||||
|       DB_PASSWORD._secret = db.passwordFile; | ||||
|       DB_HOST = db.host; | ||||
|       DB_PORT = db.port; | ||||
|       DB_NAME = db.name; | ||||
|       # FIXME | ||||
|       # DB_VERSION = lib.versions.major config.services.postgresql.package.version; | ||||
|       DB_VERSION = "15"; | ||||
|       PHP_TZ = config.time.timeZone; | ||||
|     }; | ||||
|  | ||||
|     services.postgresql = mkIf db.createLocally { | ||||
|       enable = true; | ||||
|       ensureDatabases = [ db.name ]; | ||||
|       ensureUsers = [{ | ||||
|         name = db.user; | ||||
|         ensureDBOwnership = true; | ||||
|       }]; | ||||
|     }; | ||||
|  | ||||
|     services.phpfpm.pools.koillection = { | ||||
|       inherit (cfg) user group; | ||||
|       inherit phpPackage; | ||||
|       # Copied from docker/php.ini | ||||
|       phpOptions = '' | ||||
|         max_execution_time = 200 | ||||
|  | ||||
|         apc.enabled = 1 | ||||
|         apc.shm_size = 64M | ||||
|         apc.ttl = 7200 | ||||
|  | ||||
|         opcache.enable = 1 | ||||
|         opcache.memory_consumption = 256 | ||||
|         opcache.max_accelerated_files = 20000 | ||||
|         opcache.max_wasted_percentage = 10 | ||||
|         opcache.validate_timestamps = 0 | ||||
|         opcache.preload = ${koillection}/share/php/koillection/config/preload.php | ||||
|         opcache.preload_user = ${cfg.user} | ||||
|         expose_php = Off | ||||
|  | ||||
|         session.cookie_httponly = 1 | ||||
|         realpath_cache_size = 4096K | ||||
|         realpath_cache_ttle = 600 | ||||
|       ''; | ||||
|       settings = { | ||||
|         "listen.mode" = "0660"; | ||||
|         "listen.owner" = cfg.user; | ||||
|         "listen.group" = cfg.group; | ||||
|       } // cfg.poolConfig; | ||||
|     }; | ||||
|  | ||||
|     services.nginx = { | ||||
|       enable = lib.mkDefault true; | ||||
|       virtualHosts."${cfg.hostName}" = lib.mkMerge [ | ||||
|         cfg.nginx | ||||
|         { | ||||
|           root = lib.mkForce "${koillection}/share/php/koillection/public"; | ||||
|           extraConfig = optionalString (cfg.nginx.addSSL || cfg.nginx.forceSSL || cfg.nginx.onlySSL || cfg.nginx.enableACME) "fastcgi_param HTTPS on;"; | ||||
|           locations = { | ||||
|             "/" = { | ||||
|               index = "index.php"; | ||||
|               extraConfig = ''try_files $uri $uri/ /index.php?query_string;''; | ||||
|             }; | ||||
|             "~ \.php$" = { | ||||
|               extraConfig = '' | ||||
|                 try_files $uri $uri/ /index.php?$query_string; | ||||
|                 include ${config.services.nginx.package}/conf/fastcgi_params; | ||||
|                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | ||||
|                 fastcgi_param REDIRECT_STATUS 200; | ||||
|                 fastcgi_pass unix:${config.services.phpfpm.pools."koillection".socket}; | ||||
|                 ${optionalString (cfg.nginx.addSSL || cfg.nginx.forceSSL || cfg.nginx.onlySSL || cfg.nginx.enableACME) "fastcgi_param HTTPS on;"} | ||||
|               ''; | ||||
|             }; | ||||
|             "~ \.(js|css|gif|png|ico|jpg|jpeg)$" = { | ||||
|               extraConfig = "expires 365d;"; | ||||
|             }; | ||||
|           }; | ||||
|         } | ||||
|       ]; | ||||
|     }; | ||||
|  | ||||
|     systemd.services.koillection-setup = { | ||||
|       description = "Preparation tasks for koillection"; | ||||
|       before = [ "phpfpm-koillection.service" ]; | ||||
|       wantedBy = [ "multi-user.target" ]; | ||||
|       serviceConfig = { | ||||
|         Type = "oneshot"; | ||||
|         RemainAfterExit = true; | ||||
|         User = cfg.user; | ||||
|         WorkingDirectory = koillection; | ||||
|         RuntimeDirectory = "koillection/cache"; | ||||
|         RuntimeDirectoryMode = "0700"; | ||||
|       }; | ||||
|       path = [ pkgs.replace-secret ]; | ||||
|       script = | ||||
|         let | ||||
|           isSecret = v: lib.isAttrs v && v ? _secret && lib.isString v._secret; | ||||
|           koillectionEnvVars = lib.generators.toKeyValue { | ||||
|             mkKeyValue = lib.flip lib.generators.mkKeyValueDefault "=" { | ||||
|               mkValueString = v: with builtins; | ||||
|                 if isInt v then toString v | ||||
|                 else if lib.isString v then v | ||||
|                 else if true == v then "true" | ||||
|                 else if false == v then "false" | ||||
|                 else if isSecret v then hashString "sha256" v._secret | ||||
|                 else throw "unsupported type ${typeOf v}: ${(lib.generators.toPretty {}) v}"; | ||||
|             }; | ||||
|           }; | ||||
|           secretPaths = lib.mapAttrsToList (_: v: v._secret) (lib.filterAttrs (_: isSecret) cfg.config); | ||||
|           mkSecretReplacement = file: '' | ||||
|             replace-secret ${lib.escapeShellArgs [ ( builtins.hashString "sha256" file ) file "${cfg.dataDir}/.env" ]} | ||||
|           ''; | ||||
|           secretReplacements = lib.concatMapStrings mkSecretReplacement secretPaths; | ||||
|           filteredConfig = lib.converge (lib.filterAttrsRecursive (_: v: ! builtins.elem v [{ } null])) cfg.config; | ||||
|           koillectionEnv = pkgs.writeText "koillection.env" (koillectionEnvVars filteredConfig); | ||||
|         in | ||||
|         '' | ||||
|           # error handling | ||||
|           set -euo pipefail | ||||
|  | ||||
|           # set permissions | ||||
|           umask 077 | ||||
|  | ||||
|           # create .env file | ||||
|           install -T -m 0600 -o ${cfg.user} ${koillectionEnv} "${cfg.dataDir}/.env" | ||||
|           ${secretReplacements} | ||||
|  | ||||
|           # prepend `base64:` if it does not exist in APP_KEY | ||||
|  | ||||
|           if ! grep 'APP_KEY=base64:' "${cfg.dataDir}/.env" >/dev/null; then | ||||
|               sed -i 's/APP_KEY=/APP_KEY=base64:/' "${cfg.dataDir}/.env" | ||||
|           fi | ||||
|  | ||||
|           # migrate db | ||||
|           ${lib.getExe phpPackage} ${koillection}/share/php/koillection/bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration | ||||
|  | ||||
|           # dump translations | ||||
|           # TODO: Might need pointing somewhere else. | ||||
|           ${lib.getExe phpPackage} ${koillection}/share/php/koillection/bin/console app:translations:dump | ||||
|         ''; | ||||
|     }; | ||||
|  | ||||
|     systemd.tmpfiles.rules = [ | ||||
|       "d ${cfg.dataDir}                            0710 ${cfg.user} ${cfg.group} - -" | ||||
|       "d ${cfg.dataDir}/public                     0750 ${cfg.user} ${cfg.group} - -" | ||||
|       "d ${cfg.dataDir}/public/uploads             0750 ${cfg.user} ${cfg.group} - -" | ||||
|       "d ${cfg.dataDir}/var                        0700 ${cfg.user} ${cfg.group} - -" | ||||
|       "d ${cfg.dataDir}/var/cache                  0700 ${cfg.user} ${cfg.group} - -" | ||||
|       "d ${cfg.dataDir}/var/cache/prod             0700 ${cfg.user} ${cfg.group} - -" | ||||
|       "d ${cfg.dataDir}/var/logs                   0700 ${cfg.user} ${cfg.group} - -" | ||||
|     ]; | ||||
|  | ||||
|     users = { | ||||
|       users = mkIf (cfg.user == "koillection") { | ||||
|         koillection = { | ||||
|           inherit (cfg) group; | ||||
|           isSystemUser = true; | ||||
|         }; | ||||
|         "${config.services.nginx.user}".extraGroups = [ cfg.group ]; | ||||
|       }; | ||||
|       groups = mkIf (cfg.group == "koillection") { | ||||
|         koillection = { }; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										68
									
								
								modules/services/x11/dunst.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								modules/services/x11/dunst.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| { config, lib, pkgs, ... }: | ||||
|  | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.services.dunst; | ||||
| in | ||||
| { | ||||
|   options.services.dunst = { | ||||
|     enable = mkEnableOption "dunst"; | ||||
|  | ||||
|     package = mkOption { | ||||
|       type = types.package; | ||||
|       default = pkgs.dunst; | ||||
|     }; | ||||
|  | ||||
|     settings = mkOption { | ||||
|       type = types.nullOr types.attrs; | ||||
|       default = null; | ||||
|       description = '' | ||||
|         Configuration set alternative to <literal>configFile</literal>. | ||||
|       ''; | ||||
|       example = { | ||||
|         global = { | ||||
|           monitor = 0; | ||||
|           follow = "none"; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|  | ||||
|     configFile = mkOption { | ||||
|       type = types.nullOr types.path; | ||||
|       default = null; | ||||
|       description = "Path to dunstrc configuration file."; | ||||
|     }; | ||||
|   }; | ||||
|  | ||||
|   config = mkIf cfg.enable { | ||||
|     assertions = [ | ||||
|       { | ||||
|         assertion = !(cfg.settings != null && cfg.configFile != null); | ||||
|         message = "only one of services.dunst.settings or .configFile may be specified"; | ||||
|       } | ||||
|     ]; | ||||
|  | ||||
|     environment.systemPackages = [ (getOutput "man" cfg.package) ]; | ||||
|  | ||||
|     systemd.user.services.dunst = { | ||||
|       description = "Dunst notification daemon"; | ||||
|       documentation = [ "man:dunst(1)" ]; | ||||
|       after = [ "graphical-session-pre.target" ]; | ||||
|       partOf = [ "graphical-session.target" ]; | ||||
|       serviceConfig = { | ||||
|         Type = "dbus"; | ||||
|         BusName = "org.freedesktop.Notifications"; | ||||
|         ExecStart = | ||||
|           let | ||||
|             config = | ||||
|               if (cfg.settings != null) | ||||
|               then pkgs.writeText "dunstrc" (generators.toINI { } cfg.settings) | ||||
|               else if (cfg.configFile != null) | ||||
|               then cfg.configFile | ||||
|               else null; | ||||
|           in | ||||
|           "${cfg.package}/bin/dunst ${optionalString (config != null) "-conf ${config}"}"; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| @@ -2,7 +2,7 @@ | ||||
| # case where you don't want to add the whole NUR namespace to your | ||||
| # configuration. | ||||
|  | ||||
| self: super: | ||||
| _self: super: | ||||
|  | ||||
| let | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| { stdenv | ||||
| { lib | ||||
| , fetchFromGitHub | ||||
| , python3Packages | ||||
|  | ||||
| @@ -20,7 +20,7 @@ python3Packages.buildPythonApplication rec { | ||||
|  | ||||
|   doCheck = false; | ||||
|  | ||||
|   meta = with stdenv.lib; { | ||||
|   meta = with lib; { | ||||
|     homepage = "https://github.com/Prior99/mopidy-subidy"; | ||||
|     description = "Mopidy extension for playing music from Subsonic servers"; | ||||
|     license = licenses.bsd3; | ||||
|   | ||||
							
								
								
									
										45
									
								
								pkgs/applications/editors/jetbrains/common-plugins.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								pkgs/applications/editors/jetbrains/common-plugins.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| { lib, stdenv, fetchzip }: | ||||
|  | ||||
| self: | ||||
|  | ||||
| let | ||||
|  | ||||
|   commonBuild = import ../../../build-support/jetbrains/plugin.nix { | ||||
|     inherit lib stdenv fetchzip; | ||||
|     jetbrainsPlatforms = [ | ||||
|       "clion" | ||||
|       "datagrip" | ||||
|       "goland" | ||||
|       "idea-community" | ||||
|       "idea-ultimate" | ||||
|       "phpstorm" | ||||
|       "pycharm-community" | ||||
|       "pycharm-professional" | ||||
|       "rider" | ||||
|       "ruby-mine" | ||||
|       "webstorm" | ||||
|     ]; | ||||
|   }; | ||||
|  | ||||
|   generateCommon = lib.makeOverridable ( | ||||
|     { common ? ./manual-common-packages.nix | ||||
|     }: | ||||
|     let | ||||
|  | ||||
|       imported = import common { | ||||
|         inherit (self) callPackage; | ||||
|       }; | ||||
|  | ||||
|       super = imported; | ||||
|  | ||||
|       overrides = { }; | ||||
|  | ||||
|       jetbrainsPlugins = super // overrides; | ||||
|  | ||||
|     in | ||||
|     jetbrainsPlugins // { inherit commonBuild; } | ||||
|   ); | ||||
|  | ||||
| in | ||||
| generateCommon { } | ||||
|  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -9,9 +9,10 @@ let | ||||
|     jetbrainsPlatforms = [ "idea-community" "idea-ultimate" ]; | ||||
|   }; | ||||
|  | ||||
|   generateIdea = lib.makeOverridable ({ | ||||
|     idea ? ./idea-generated.nix | ||||
|   }: let | ||||
|   generateIdea = lib.makeOverridable ( | ||||
|     { idea ? ./manual-idea-packages.nix | ||||
|     }: | ||||
|     let | ||||
|  | ||||
|       imported = import idea { | ||||
|         inherit (self) callPackage; | ||||
| @@ -23,7 +24,10 @@ let | ||||
|  | ||||
|       ideaPlugins = super // overrides; | ||||
|  | ||||
|   in ideaPlugins // { inherit ideaBuild; }); | ||||
|     in | ||||
|     ideaPlugins // { inherit ideaBuild; } | ||||
|   ); | ||||
|  | ||||
| in generateIdea { } | ||||
| in | ||||
| generateIdea { } | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,33 @@ | ||||
| { callPackage }: | ||||
| { | ||||
|   ideavim = callPackage | ||||
|     ({ commonBuild }: commonBuild { | ||||
|       pname = "IdeaVim"; | ||||
|       version = "0.57"; | ||||
|       pluginId = 164; | ||||
|       versionId = 85009; | ||||
|       sha256 = "1rwfwj0b0nwi7jxhzxk1r0xc190nf4i3b59i0zknpmgb4yc5clzw"; | ||||
|     }) | ||||
|     { }; | ||||
|  | ||||
|   checkstyle-idea = callPackage | ||||
|     ({ commonBuild }: commonBuild { | ||||
|       pname = "CheckStyle-IDEA"; | ||||
|       version = "5.42.0"; | ||||
|       pluginId = 1065; | ||||
|       versionId = 95757; | ||||
|       sha256 = "0sji3649n5zz84dlidqaklipq6vaiafxsvg0gzy3j59mvkz6dk14"; | ||||
|     }) | ||||
|     { }; | ||||
|  | ||||
|   google-java-format = callPackage | ||||
|     ({ commonBuild }: commonBuild rec { | ||||
|       pname = "google-java-format"; | ||||
|       version = "1.7.0.4"; | ||||
|       pluginId = 8527; | ||||
|       versionId = 83164; | ||||
|       sha256 = "1pmnn1ksiv44kdga53gi3psrm2sva4bqrxizagbr0if2n0rrvgii"; | ||||
|       filename = "${pname}.zip"; | ||||
|     }) | ||||
|     { }; | ||||
| } | ||||
							
								
								
									
										12
									
								
								pkgs/applications/editors/jetbrains/manual-idea-packages.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								pkgs/applications/editors/jetbrains/manual-idea-packages.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| { callPackage }: | ||||
| { | ||||
|   spring-assistant = callPackage | ||||
|     ({ ideaBuild }: ideaBuild { | ||||
|       pname = "intellij-spring-assistant"; | ||||
|       version = "0.12.0"; | ||||
|       pluginId = 10229; | ||||
|       versionId = 44968; | ||||
|       sha256 = "13cglywzhb4j0qj0bs2jwaz2k8pxrxalv35wgkmgkxr635bxmwsj"; | ||||
|     }) | ||||
|     { }; | ||||
| } | ||||
| @@ -1,12 +0,0 @@ | ||||
| #!/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: | ||||
| @@ -1,26 +0,0 @@ | ||||
| { 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; | ||||
|     }; | ||||
| } | ||||
| @@ -1,4 +1,5 @@ | ||||
| { lib, makeWrapper, runCommand }: self: | ||||
| { lib | ||||
| }: self: | ||||
|  | ||||
| with lib; | ||||
|  | ||||
| @@ -19,31 +20,12 @@ 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 | ||||
| appendToName "with-plugins" (package.overrideAttrs (oldAttrs: { | ||||
|   passthru = { inherit plugins; }; | ||||
|   # TODO: Purely aesthetics, but link the plugin to its name instead of hash-name-version | ||||
|   installPhase = oldAttrs.installPhase + '' | ||||
|     for plugin in $plugins; do | ||||
|     local pluginName=$(basename $plugin) | ||||
|     pluginName=''${pluginName#*-} | ||||
|     pluginName=''${pluginName%-[0-9.]*} | ||||
|     ln -s $plugin $out/$packageName/plugins/$pluginName | ||||
|       ln -s "$plugin" "$out/$name/plugins/$(basename $plugin)" | ||||
|     done | ||||
|  | ||||
|   # Fix up wrapper | ||||
|   substituteInPlace $out/bin/* \ | ||||
|     --replace "$package" "$out" | ||||
| '' | ||||
|   ''; | ||||
| })) | ||||
|   | ||||
| @@ -1,13 +0,0 @@ | ||||
| diff --git a/include/components/types.hpp b/include/components/types.hpp | ||||
| index 8125d4b..c435f4a 100644 | ||||
| --- a/include/components/types.hpp | ||||
| +++ b/include/components/types.hpp | ||||
| @@ -57,7 +57,7 @@ enum class controltag { | ||||
|    R,  // Reset all open tags (B, F, T, o, u). Used at module edges | ||||
|  }; | ||||
|  | ||||
| -enum class mousebtn { NONE = 0, LEFT, MIDDLE, RIGHT, SCROLL_UP, SCROLL_DOWN, DOUBLE_LEFT, DOUBLE_MIDDLE, DOUBLE_RIGHT }; | ||||
| +enum class mousebtn { NONE = 0, LEFT, MIDDLE, RIGHT, SCROLL_UP, SCROLL_DOWN, DOUBLE_LEFT, DOUBLE_MIDDLE, DOUBLE_RIGHT, EXTRA }; | ||||
|  | ||||
|  enum class strut { | ||||
|    LEFT = 0, | ||||
| @@ -1,44 +0,0 @@ | ||||
| { qtbase, go, goModules }: | ||||
|  | ||||
| { | ||||
|   pname = "protonmail-bridge"; | ||||
|  | ||||
|   tags = "pmapi_prod"; | ||||
|  | ||||
|   QT_PKG_CONFIG = "true"; | ||||
|   QT_VERSION = qtbase.version; | ||||
|  | ||||
|   nativeBuildInputs = [ | ||||
|     goModules.qt | ||||
|     qtbase | ||||
|   ]; | ||||
|  | ||||
|   buildPhase = '' | ||||
|     cp cmd/Desktop-Bridge/main.go . | ||||
|  | ||||
|     ## Enable writable vendor | ||||
|     GOMODULE=gomodule | ||||
|     mv vendor $GOMODULE-vendor | ||||
|     mkdir vendor | ||||
|     readarray -t files < <(find $GOMODULE-vendor/ -type f | grep -v github.com/therecipe/qt | sed "s/$GOMODULE-//") | ||||
|     for f in "''${files[@]}"; do | ||||
|       mkdir -p $(dirname $f) | ||||
|       cp -s $PWD/$GOMODULE-$f $f | ||||
|     done | ||||
|     unset GOMODULE | ||||
|  | ||||
|     ## | ||||
|     mkdir -p vendor/github.com/therecipe | ||||
|     cp -r gomodule-vendor/github.com/therecipe/qt vendor/github.com/therecipe/qt | ||||
|     chmod -R a+w vendor/github.com/therecipe/qt | ||||
|  | ||||
|     # Add vendor to GOPATH because fuck | ||||
|     mkdir -p $GOPATH | ||||
|     ln -s $PWD/vendor $GOPATH/src | ||||
|  | ||||
|     qtsetup check | ||||
|     GOROOT=${go}/share/go qtdeploy "''${buildFlagsArray[@]}" build desktop | ||||
|   ''; | ||||
|  | ||||
|   meta.broken = true; | ||||
| } | ||||
| @@ -1,69 +0,0 @@ | ||||
| { stdenv | ||||
| , fetchFromGitHub | ||||
| , buildGoModule | ||||
|  | ||||
| , go | ||||
| , goModules | ||||
| , libsecret | ||||
| , pkg-config | ||||
| , qtbase | ||||
| , qtdoc | ||||
| }: | ||||
|  | ||||
| let | ||||
|  | ||||
|   builder = | ||||
|     { pname | ||||
|     , tags | ||||
|     , ... | ||||
|     }@args: | ||||
|  | ||||
|     buildGoModule (stdenv.lib.recursiveUpdate args rec { | ||||
|       inherit pname; | ||||
|       version = "1.5.6"; | ||||
|  | ||||
|       src = fetchFromGitHub { | ||||
|         owner = "ProtonMail"; | ||||
|         repo = "proton-bridge"; | ||||
|         rev = "br-${version}"; | ||||
|         sha256 = "1na8min9cmn82lpad58abw6837k303fr09l6cvzswaxs73f231ig"; | ||||
|       }; | ||||
|  | ||||
|       vendorSha256 = "1219xa1347877bfhnid15y6w9s4hf1czbrmll2iha4gpsmg066bb"; | ||||
|  | ||||
|       nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ | ||||
|         pkg-config | ||||
|       ]; | ||||
|  | ||||
|       buildInputs = (args.buildInputs or [ ]) ++ [ | ||||
|         libsecret | ||||
|       ]; | ||||
|  | ||||
|       buildFlagsArray = | ||||
|         let | ||||
|           t = "github.com/ProtonMail/proton-bridge/pkg/constants"; | ||||
|         in | ||||
|         [ | ||||
|           "-tags=${tags}" | ||||
|           '' | ||||
|             -ldflags= | ||||
|               -X ${t}.Version=${version} | ||||
|               -X ${t}.Revision=unknown | ||||
|               -X ${t}.BuildDate=unknown | ||||
|           '' | ||||
|         ]; | ||||
|  | ||||
|       meta = with stdenv.lib; { | ||||
|         description = "Integrate ProtonMail paid account with any program that supports IMAP and SMTP"; | ||||
|         homepage = "https://protonmail.com"; | ||||
|         license = licenses.gpl3; | ||||
|         plaforms = platforms.x86_64; | ||||
|       }; | ||||
|     }); | ||||
|  | ||||
| in | ||||
|  | ||||
| { | ||||
|   protonmail-bridge = builder (import ./app.nix { inherit qtbase go goModules; }); | ||||
|   protonmail-bridge-headless = builder (import ./headless.nix { }); | ||||
| } | ||||
| @@ -1,768 +0,0 @@ | ||||
| # file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix) | ||||
| [ | ||||
|   { | ||||
|     goPackagePath = "github.com/0xAX/notificator"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/0xAX/notificator"; | ||||
|       rev = "3962a5ea8da1"; | ||||
|       sha256 = "1lkn6mmghsd4a2h3na8x0r5xgckjn3c0v5vsp6bzhl2k1zxb640p"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/BurntSushi/toml"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/BurntSushi/toml"; | ||||
|       rev = "v0.3.1"; | ||||
|       sha256 = "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/ProtonMail/go-appdir"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ProtonMail/go-appdir"; | ||||
|       rev = "v1.1.0"; | ||||
|       sha256 = "1pl43h5f79g2r0z98glrxasbb69yzigpd85csl7zmyhg63vzbkqw"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/ProtonMail/go-apple-mobileconfig"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ProtonMail/go-apple-mobileconfig"; | ||||
|       rev = "7ea9927a11f6"; | ||||
|       sha256 = "1vlm9m54xmq0r8bhgwzdmxnxf97sz01lgi6lw8pcjbljmzb9l75f"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/ProtonMail/go-autostart"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ProtonMail/go-autostart"; | ||||
|       rev = "c5272053443a"; | ||||
|       sha256 = "0cjnsbqrkhlapma2070cqcxr4wkvv55is3byqn8zmkzi0l3217nf"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/ProtonMail/go-imap-id"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ProtonMail/go-imap-id"; | ||||
|       rev = "ed0baee567ee"; | ||||
|       sha256 = "1kljw64pi3kabbd3gi7zy9wqzaypsxrdi5mfwf6akl438bq44jm4"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/ProtonMail/go-mime"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ProtonMail/go-mime"; | ||||
|       rev = "09454e3dbe72"; | ||||
|       sha256 = "1ncca6191nf0lsfhhhdxdbhxg3b2q1cmvjhq2428g0b50dlfkrnn"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/ProtonMail/go-vcard"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ProtonMail/go-vcard"; | ||||
|       rev = "33aaa0a0c8a5"; | ||||
|       sha256 = "19cify6lxd2yirqc92yfgzvn5qlc8a01a2kxjdg83jv0lx6ps26q"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/ProtonMail/gopenpgp"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ProtonMail/gopenpgp"; | ||||
|       rev = "d398098113ed"; | ||||
|       sha256 = "0ry69mymb6q00g4khdbzllrz7b44zhxvdzavhz6936n9dzsay13v"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/abiosoft/ishell"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/abiosoft/ishell"; | ||||
|       rev = "v2.0.0"; | ||||
|       sha256 = "11r6l133aaz6khm60x0a410ckpzvqzv2az7z5b088c2vddnp538r"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/abiosoft/readline"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/abiosoft/readline"; | ||||
|       rev = "155bce2042db"; | ||||
|       sha256 = "104q8dazj8yf6b089jjr82fy9h1g80zyyzvp3g8b44a7d8ngjj6r"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/allan-simon/go-singleinstance"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/allan-simon/go-singleinstance"; | ||||
|       rev = "79edcfdc2dfc"; | ||||
|       sha256 = "06xrxifz5cd98iji7v46zq9xf63zf77sqbr72w1ics3s2hyfkpjz"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/andybalholm/cascadia"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/andybalholm/cascadia"; | ||||
|       rev = "v1.1.0"; | ||||
|       sha256 = "1slh68ysbixc21gbni4msrgq971n59gnn2x3ys196jd413a6qf0f"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/cention-sany/utf7"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/cention-sany/utf7"; | ||||
|       rev = "26cad61bd60a"; | ||||
|       sha256 = "1jy15ryfcln1iwchrksqyrnyfy41gisymm4f9sr1d73ja029bznm"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/certifi/gocertifi"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/certifi/gocertifi"; | ||||
|       rev = "c7c1fbc02894"; | ||||
|       sha256 = "018bsy1vclsdk2kns9f37giabibg3kggk3vpj0yr3dv0k72gzybk"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/chzyer/logex"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/chzyer/logex"; | ||||
|       rev = "v1.1.10"; | ||||
|       sha256 = "08pbjj3wx9acavlwyr055isa8a5hnmllgdv5k6ra60l5y1brmlq4"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/chzyer/test"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/chzyer/test"; | ||||
|       rev = "a1ea475d72b1"; | ||||
|       sha256 = "0rns2aqk22i9xsgyap0pq8wi4cfaxsri4d9q6xxhhyma8jjsnj2k"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/cpuguy83/go-md2man"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/cpuguy83/go-md2man"; | ||||
|       rev = "f79a8a8ca69d"; | ||||
|       sha256 = "0r1f7v475dxxgzqci1mxfliwadcrk86ippflx9n411325l4g3ghv"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/cucumber/godog"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/cucumber/godog"; | ||||
|       rev = "v0.8.1"; | ||||
|       sha256 = "00bplmx3r7mjaxyf1ky1mh9ps17p78656xjpkqf3wkfhchssm3ny"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/danieljoos/wincred"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/danieljoos/wincred"; | ||||
|       rev = "v1.0.2"; | ||||
|       sha256 = "1ym8mygjrf3rw1qka9irw76b2yisr2l5pq2w581s40yldnbfq4lc"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/davecgh/go-spew"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/davecgh/go-spew"; | ||||
|       rev = "v1.1.1"; | ||||
|       sha256 = "0hka6hmyvp701adzag2g26cxdj47g21x6jz4sc6jjz1mn59d474y"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/docker/docker-credential-helpers"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ProtonMail/docker-credential-helpers"; | ||||
|       rev = "0326642117d8"; | ||||
|       sha256 = "02qfw1w6v14kfjlc6slg7hvv2raan5263ivymdn2pjm3hdcgs7lh"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/emersion/go-imap"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ProtonMail/go-imap"; | ||||
|       rev = "0e686f0e855f"; | ||||
|       sha256 = "1gijqy3wq6lbqbrljl4l12w5snji3c9fpvywhk9wyd56mdsy7wyr"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/emersion/go-imap-appendlimit"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/emersion/go-imap-appendlimit"; | ||||
|       rev = "beeb382f2a42"; | ||||
|       sha256 = "089kgnryvignl9z5c3fi5bxyc3jl7jgmz6ykhk73n8nqp8kgi43b"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/emersion/go-imap-idle"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/emersion/go-imap-idle"; | ||||
|       rev = "e03ba1e0ed89"; | ||||
|       sha256 = "0yavndwl9g3q4j97659kq1mpyc22q27vq0lg0f7v704irmbbkanp"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/emersion/go-imap-move"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/emersion/go-imap-move"; | ||||
|       rev = "88aef42b0f1d"; | ||||
|       sha256 = "006l76qxkf7gnb0kc7r9xmxg7nmmwfw8sf5lsg05093rwcg232f4"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/emersion/go-imap-quota"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ProtonMail/go-imap-quota"; | ||||
|       rev = "20f0ba8904de"; | ||||
|       sha256 = "1qvhzsm0wjg0ndk963l9wcmdiyacbrmslhvmg1zhj3k9np41ravv"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/emersion/go-imap-specialuse"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/emersion/go-imap-specialuse"; | ||||
|       rev = "ba031ced6a62"; | ||||
|       sha256 = "0f8rxgr4z5a7nphhz6vnsqgjr04wwrvdcnsxp5rl2lh60yvj3wig"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/emersion/go-imap-unselect"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/emersion/go-imap-unselect"; | ||||
|       rev = "1e6dc73ac8fe"; | ||||
|       sha256 = "0higgjn41ksgsl11zphljbz690i17swzhfkij51dghjnj9q287ff"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/emersion/go-sasl"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/emersion/go-sasl"; | ||||
|       rev = "430746ea8b9b"; | ||||
|       sha256 = "11rhbayr1w3zhpl3q7gd6i15qz97pk0k4xs0n39m91hrgl1fj03c"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/emersion/go-smtp"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ProtonMail/go-smtp"; | ||||
|       rev = "8261df20d309"; | ||||
|       sha256 = "0n6k7xbffzsxfjcc74q21nh8dp5s44v3xh9hrsi7a147n8qm83iq"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/emersion/go-textwrapper"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/emersion/go-textwrapper"; | ||||
|       rev = "d0e65e56babe"; | ||||
|       sha256 = "1nw8qpjjbpkz49wd19yg2qsln1dmdfxi83wp2aa819cv6xxf2y7l"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/emersion/go-vcard"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/emersion/go-vcard"; | ||||
|       rev = "8856043f13c5"; | ||||
|       sha256 = "1dzw5awqbkf2nc09ynmn3zlylj4n1na96rziv5z8p42b1bmbklwk"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/fatih/color"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/fatih/color"; | ||||
|       rev = "v1.9.0"; | ||||
|       sha256 = "086z8ssmr1fn9ba4mqnw7pnccfpys6l5yfhvycv1gdrsk7n27mvs"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/flynn-archive/go-shlex"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/flynn-archive/go-shlex"; | ||||
|       rev = "3f9db97f8568"; | ||||
|       sha256 = "1j743lysygkpa2s2gii2xr32j7bxgc15zv4113b0q9jhn676ysia"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/getsentry/raven-go"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/getsentry/raven-go"; | ||||
|       rev = "v0.2.0"; | ||||
|       sha256 = "0imfwmsb72168fqandf2lxhzhngf2flxhzaar8hcnnfjv2a291lf"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/go-resty/resty"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/go-resty/resty"; | ||||
|       rev = "v2.2.0"; | ||||
|       sha256 = "0khfcq07kq6z2vq0i42an8fd16pl1rc980rlf7c1x4szsf8qcajm"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/go-test/deep"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/go-test/deep"; | ||||
|       rev = "v1.0.2"; | ||||
|       sha256 = "1dax5bbp95lvkns0jjwf6l3rqj5q4xxd37whpqa8nyyjcakdxnqd"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/gogs/chardet"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/gogs/chardet"; | ||||
|       rev = "2404f7772561"; | ||||
|       sha256 = "1dki2pqhnzcmzlqrq4d4jwknnjxm82xqnmizjjdblb6h98ans1cd"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/golang/mock"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/golang/mock"; | ||||
|       rev = "v1.4.3"; | ||||
|       sha256 = "1p37xnja1dgq5ykx24n7wincwz2gahjh71b95p8vpw7ss2g8j8wx"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/google/go-cmp"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/google/go-cmp"; | ||||
|       rev = "v0.4.0"; | ||||
|       sha256 = "1x5pvl3fb5sbyng7i34431xycnhmx8xx94gq2n19g6p0vz68z2v2"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/gopherjs/gopherjs"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/gopherjs/gopherjs"; | ||||
|       rev = "3e4dfb77656c"; | ||||
|       sha256 = "0bmapn4dskpr4a79kcr5irkw19px4a71ls5gspffxiva7sapgyvw"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/hashicorp/errwrap"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/hashicorp/errwrap"; | ||||
|       rev = "v1.0.0"; | ||||
|       sha256 = "0slfb6w3b61xz04r32bi0a1bygc82rjzhqkxj2si2074wynqnr1c"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/hashicorp/go-multierror"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/hashicorp/go-multierror"; | ||||
|       rev = "v1.0.0"; | ||||
|       sha256 = "00nyn8llqzbfm8aflr9kwsvpzi4kv8v45c141v88xskxp5xf6z49"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/jameskeane/bcrypt"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ProtonMail/bcrypt"; | ||||
|       rev = "7509ea014998"; | ||||
|       sha256 = "12xi8i4sb6q4h4wd6w1phqpzxpff5c629ard8cnkjp7qmznvcc20"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/jaytaylor/html2text"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/jaytaylor/html2text"; | ||||
|       rev = "61d9dc4d7195"; | ||||
|       sha256 = "19cn6k8anx8w2ar8kwza6vlijim2xbj4hqxy1m79y0m386b2hapl"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/jhillyerd/enmime"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/jhillyerd/enmime"; | ||||
|       rev = "v0.8.0"; | ||||
|       sha256 = "1wzz3hzf8bnn0wbxznzrfdrs4x7qxdgqpf1xirlsisq8z0r8hn9z"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/kardianos/osext"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/kardianos/osext"; | ||||
|       rev = "2bc1f35cddc0"; | ||||
|       sha256 = "1pvrbrvmrf4mx0fxbfaphbzgqgwn8v6lkfk2vyrs0znxrs1xyc5r"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/keybase/go-keychain"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/keybase/go-keychain"; | ||||
|       rev = "86d4642e4ce2"; | ||||
|       sha256 = "05prxx2bbcqwk5lwk1gdqsrwy256mp4k4im316h9ar3sh42frha6"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/konsorten/go-windows-terminal-sequences"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/konsorten/go-windows-terminal-sequences"; | ||||
|       rev = "v1.0.2"; | ||||
|       sha256 = "09mn209ika7ciy87xf2x31dq5fnqw39jidgaljvmqxwk7ff1hnx7"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/logrusorgru/aurora"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/logrusorgru/aurora"; | ||||
|       rev = "e9ef32dff381"; | ||||
|       sha256 = "19laya9dav84miw3d0c9vgiv577wzrhydv5mdiii59sgbd780hhq"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/mattn/go-colorable"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/mattn/go-colorable"; | ||||
|       rev = "v0.1.4"; | ||||
|       sha256 = "1yxcz08kminqr1221zxpibnbzfcgs3fafin0z9zqb3gqvf74jywz"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/mattn/go-isatty"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/mattn/go-isatty"; | ||||
|       rev = "v0.0.11"; | ||||
|       sha256 = "0h671sv7hfprja495kavazkalkx7xzaqksjh13brcnwq67ijrali"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/mattn/go-runewidth"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/mattn/go-runewidth"; | ||||
|       rev = "v0.0.4"; | ||||
|       sha256 = "00b3ssm7wiqln3k54z2wcnxr3k3c7m1ybyhb9h8ixzbzspld0qzs"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/miekg/dns"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/miekg/dns"; | ||||
|       rev = "v1.1.29"; | ||||
|       sha256 = "1bkk930cg46w1akii60bqqkgy9h9axlcfnqk252r6w8qqpf4z5hh"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/myesui/uuid"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/myesui/uuid"; | ||||
|       rev = "v1.0.0"; | ||||
|       sha256 = "1si8cfjin9dyzprnyvfk8pckbsvg97hzs9hffz91505lpidlb9bc"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/nsf/jsondiff"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/nsf/jsondiff"; | ||||
|       rev = "8443391ee9b6"; | ||||
|       sha256 = "1zxk0mzil5x197zaqjld403f3vvzilgvciq1z62zl1c1vbwbpwch"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/olekukonko/tablewriter"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/olekukonko/tablewriter"; | ||||
|       rev = "v0.0.1"; | ||||
|       sha256 = "0hh95glg7d2md185r03wn52j2r33jc4zil0qvcrs66ka7bdxi7vj"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/pkg/errors"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/pkg/errors"; | ||||
|       rev = "v0.9.1"; | ||||
|       sha256 = "1761pybhc2kqr6v5fm8faj08x9bql8427yqg6vnfv6nhrasx1mwq"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/pmezard/go-difflib"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/pmezard/go-difflib"; | ||||
|       rev = "v1.0.0"; | ||||
|       sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/russross/blackfriday"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/russross/blackfriday"; | ||||
|       rev = "v2.0.1"; | ||||
|       sha256 = "0nlz7isdd4rgnwzs68499hlwicxz34j2k2a0b8jy0y7ycd2bcr5j"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/saintfish/chardet"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/saintfish/chardet"; | ||||
|       rev = "3af4cd4741ca"; | ||||
|       sha256 = "0czh50md64k9lbllayq0asir3174saxb88yzxrh640yhfxd98pcb"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/shurcooL/sanitized_anchor_name"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/shurcooL/sanitized_anchor_name"; | ||||
|       rev = "v1.0.0"; | ||||
|       sha256 = "1gv9p2nr46z80dnfjsklc6zxbgk96349sdsxjz05f3z6wb6m5l8f"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/sirupsen/logrus"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/sirupsen/logrus"; | ||||
|       rev = "v1.4.2"; | ||||
|       sha256 = "087k2lxrr9p9dh68yw71d05h5g9p5v26zbwd6j7lghinjfaw334x"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/skratchdot/open-golang"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/skratchdot/open-golang"; | ||||
|       rev = "eef842397966"; | ||||
|       sha256 = "0n6387csjn024db8wldadsiy8ljz7lk7szl6ls28fcbkax7rw86y"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/ssor/bom"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ssor/bom"; | ||||
|       rev = "6386211fdfcf"; | ||||
|       sha256 = "09g5496ifwqxqclh2iw58plcwcz0sczlnxwqxzwmnl4shdl371ld"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/stretchr/objx"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/stretchr/objx"; | ||||
|       rev = "v0.2.0"; | ||||
|       sha256 = "0pcdvakxgddaiwcdj73ra4da05a3q4cgwbpm2w75ycq4kzv8ij8k"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/stretchr/testify"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/stretchr/testify"; | ||||
|       rev = "v1.5.1"; | ||||
|       sha256 = "09r89m1wy4cjv2nps1ykp00qjpi0531r07q3s34hr7m6njk4srkl"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/therecipe/qt"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/therecipe/qt"; | ||||
|       rev = "5074eb6d8c41"; | ||||
|       sha256 = "1zpil531gjravag76p1032c7wizpskzanymdpc74rs8ixckws9zi"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/twinj/uuid"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/twinj/uuid"; | ||||
|       rev = "v1.0.0"; | ||||
|       sha256 = "1si8cfjin9dyzprnyvfk8pckbsvg97hzs9hffz91505lpidlb9bc"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/urfave/cli"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/urfave/cli"; | ||||
|       rev = "v1.22.3"; | ||||
|       sha256 = "1lz6i6h4mcb4zqclj2lgy34hwpj1bpkxwzkgrqikfsd8pp9wyq9q"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "go.etcd.io/bbolt"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/etcd-io/bbolt"; | ||||
|       rev = "v1.3.3"; | ||||
|       sha256 = "0dn0zngks9xiz0rrrb3911f73ghl64z84jsmzai2yfmzqr7cdkqc"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "golang.org/x/crypto"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/ProtonMail/crypto"; | ||||
|       rev = "d3d8a14a4d4f"; | ||||
|       sha256 = "1w5q5snw1nqsdwqffvk0rlmsqx5b6mpfi45adr2j4lzzpw1ab03a"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "golang.org/x/mod"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://go.googlesource.com/mod"; | ||||
|       rev = "c90efee705ee"; | ||||
|       sha256 = "0i5md645rmcy5z5ij9ng428k9rz4g3k1kjy3blsq1264rn426gdf"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "golang.org/x/net"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://go.googlesource.com/net"; | ||||
|       rev = "244492dfa37a"; | ||||
|       sha256 = "0vm2q44phz4vjnzq9428rjk58c82fxf003whczp7c9ryn9fazh7s"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "golang.org/x/sync"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://go.googlesource.com/sync"; | ||||
|       rev = "112230192c58"; | ||||
|       sha256 = "05i2k43j2d0llq768hg5pf3hb2yhfzp9la1w5wp0rsnnzblr0lfn"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "golang.org/x/sys"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://go.googlesource.com/sys"; | ||||
|       rev = "33540a1f6037"; | ||||
|       sha256 = "0fjcv0vzvi6za0b4xmnk3932pr9f9gczzf03y0kgq3ry9rqg169y"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "golang.org/x/text"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://go.googlesource.com/text"; | ||||
|       rev = "v0.3.2"; | ||||
|       sha256 = "0flv9idw0jm5nm8lx25xqanbkqgfiym6619w575p7nrdh0riqwqh"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "golang.org/x/tools"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://go.googlesource.com/tools"; | ||||
|       rev = "49a3e744a425"; | ||||
|       sha256 = "0xx4gv9wpv36crk7gv7imf5vzzs2mz7zla2q2jkck3xnzff8fw3v"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "golang.org/x/xerrors"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://go.googlesource.com/xerrors"; | ||||
|       rev = "9bdfabe68543"; | ||||
|       sha256 = "1yjfi1bk9xb81lqn85nnm13zz725wazvrx3b50hx19qmwg7a4b0c"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "gopkg.in/check.v1"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://gopkg.in/check.v1"; | ||||
|       rev = "20d25e280405"; | ||||
|       sha256 = "0k1m83ji9l1a7ng8a7v40psbymxasmssbrrhpdv2wl4rhs0nc3np"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "gopkg.in/stretchr/testify.v1"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://gopkg.in/stretchr/testify.v1"; | ||||
|       rev = "v1.2.2"; | ||||
|       sha256 = "0dlszlshlxbmmfxj5hlwgv3r22x0y1af45gn1vd198nvvs3pnvfs"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "gopkg.in/yaml.v2"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://gopkg.in/yaml.v2"; | ||||
|       rev = "v2.2.2"; | ||||
|       sha256 = "01wj12jzsdqlnidpyjssmj0r4yavlqy7dwrg7adqd8dicjc4ncsa"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "rsc.io/quote"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/rsc/quote"; | ||||
|       rev = "v3.1.0"; | ||||
|       sha256 = "0nvv97hwwrl1mx5gzsbdm1ndnwpg3m7i2jb10ig9wily7zmvki0i"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "rsc.io/sampler"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/rsc/sampler"; | ||||
|       rev = "v1.3.0"; | ||||
|       sha256 = "0byxk2ynba50py805kcvbvjzh59l1r308i1xgyzpw6lff4xx9xjh"; | ||||
|     }; | ||||
|   } | ||||
| ] | ||||
| @@ -1,30 +0,0 @@ | ||||
| {}: | ||||
|  | ||||
| rec { | ||||
|   pname = "protonmail-bridge-headless"; | ||||
|  | ||||
|   tags = "pmapi_prod nogui"; | ||||
|  | ||||
|   # FIXME: There's something fucky going on in the buildFlagsArray | ||||
|   # substitution. I shouldn't need to do this. | ||||
|   buildPhase = | ||||
|     let | ||||
|       t = "github.com/ProtonMail/proton-bridge/pkg/constants"; | ||||
|     in | ||||
|     '' | ||||
|       runHook preBuild | ||||
|  | ||||
|       go install \ | ||||
|         -tags="${tags}" \ | ||||
|         -ldflags="-X ${t}.Version=1.3.2 -X ${t}.Revision=unknown -X ${t}.BuildDate=unknown" \ | ||||
|         cmd/Desktop-Bridge/main.go | ||||
|       mv $GOPATH/bin/main $GOPATH/bin/Desktop-Bridge | ||||
|          | ||||
|       runHook postBuild | ||||
|     ''; | ||||
|  | ||||
|   # Fix up name. | ||||
|   postInstall = '' | ||||
|     mv $out/bin/Desktop-Bridge $out/bin/protonmail-bridge | ||||
|   ''; | ||||
| } | ||||
| @@ -1,62 +0,0 @@ | ||||
| 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', | ||||
| @@ -1,71 +0,0 @@ | ||||
| { 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; | ||||
|   }; | ||||
| } | ||||
| @@ -4,38 +4,30 @@ | ||||
| , jetbrainsPlatforms | ||||
| }: | ||||
|  | ||||
| { plugid | ||||
| { pluginId | ||||
| , pname | ||||
| , version | ||||
| , ... | ||||
| }@args: | ||||
| , versionId | ||||
| , sha256 | ||||
| , filename ? "${pname}-${version}.zip" | ||||
| }: | ||||
|  | ||||
| let | ||||
| stdenv.mkDerivation { | ||||
|   inherit pname version; | ||||
|  | ||||
|   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; | ||||
|   src = fetchzip { | ||||
|     inherit sha256; | ||||
|     url = "https://plugins.jetbrains.com/files/${toString pluginId}/${toString versionId}/${filename}"; | ||||
|   }; | ||||
|  | ||||
| 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; | ||||
|     homepage = "https://plugins.jetbrains.com/plugin/${pluginId}-${lib.toLower pname}"; | ||||
|   }; | ||||
| }) | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| { stdenv | ||||
| { lib | ||||
| , fetchFromGitHub | ||||
| 
 | ||||
| , python3Packages | ||||
| @@ -20,7 +20,12 @@ python3Packages.buildPythonApplication rec { | ||||
|     pyyaml | ||||
|   ]; | ||||
| 
 | ||||
|   meta = with stdenv.lib; { | ||||
|   patchPhase = '' | ||||
|     substituteInPlace setup.py \ | ||||
|       --replace PROJECTVERSION "${version}" | ||||
|   ''; | ||||
| 
 | ||||
|   meta = with lib; { | ||||
|     description = "Fan controller for AMD graphics cards running the amdgpu driver on Linux"; | ||||
|     homepage = "https://github.com/chestm007/amdgpu-fan"; | ||||
|     license = licenses.gpl2; | ||||
							
								
								
									
										82
									
								
								pkgs/by-name/be/betanin/package.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								pkgs/by-name/be/betanin/package.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | ||||
| { lib | ||||
| , buildNpmPackage | ||||
| , fetchFromGitHub | ||||
| , python3 | ||||
| , beets | ||||
| }: | ||||
|  | ||||
| let | ||||
|   version = "0.5.6"; | ||||
|  | ||||
|   src = fetchFromGitHub { | ||||
|     owner = "sentriz"; | ||||
|     repo = "betanin"; | ||||
|     rev = "v${version}"; | ||||
|     hash = "sha256-8JzZfxXzey6vGwsnpXTea/gTMFwmeeavimn5njHIEg0="; | ||||
|   }; | ||||
|  | ||||
|   client = buildNpmPackage { | ||||
|     pname = "betanin_client"; | ||||
|     inherit version src; | ||||
|  | ||||
|     sourceRoot = "${src.name}/betanin_client"; | ||||
|  | ||||
|     npmDepsHash = "sha256-VkCQKpkDCTDejv8eRAN2Zfbq8TlWLdtqVJU3fo9hQrI="; | ||||
|     NODE_ENV = "production"; | ||||
|     NODE_OPTIONS = "--openssl-legacy-provider"; | ||||
|  | ||||
|     npmInstallFlags = [ "--include=dev" ]; | ||||
|     installPhase = '' | ||||
|       cp -r dist $out | ||||
|     ''; | ||||
|   }; | ||||
| in | ||||
| python3.pkgs.buildPythonApplication { | ||||
|   pname = "betanin"; | ||||
|   inherit version src; | ||||
|   format = "pyproject"; | ||||
|  | ||||
|   patches = [ ./paths.patch ]; | ||||
|   postPatch = '' | ||||
|     export clientDistDir="${client}" | ||||
|     export libPrefix="${python3.libPrefix}" | ||||
|     substituteAllInPlace betanin/paths.py | ||||
|  | ||||
|     # pythonRelaxDepsHook doesn't work | ||||
|     sed -i 's/Flask <3.0.0/Flask/' pyproject.toml | ||||
|   ''; | ||||
|  | ||||
|   build-system = with python3.pkgs; [ setuptools ]; | ||||
|  | ||||
|   dependencies = (with python3.pkgs; [ | ||||
|     apprise | ||||
|     alembic | ||||
|     click | ||||
|     flask | ||||
|     flask-cors | ||||
|     flask-jwt-extended | ||||
|     flask_migrate | ||||
|     flask-restx | ||||
|     flask-socketio | ||||
|     flask-sqlalchemy | ||||
|     gevent | ||||
|     pyxdg | ||||
|     loguru | ||||
|     ptyprocess | ||||
|     python-engineio | ||||
|     python-socketio | ||||
|     sqlalchemy | ||||
|     sqlalchemy-utils | ||||
|     toml | ||||
|   ]) ++ [ | ||||
|     beets | ||||
|   ]; | ||||
|  | ||||
|   meta = { | ||||
|     homepage = "https://github.com/sentriz/betanin"; | ||||
|     description = "beets based mitm of your torrent client and music player"; | ||||
|     license = lib.licenses.gpl3Only; | ||||
|     maintainers = [ ]; | ||||
|     platforms = lib.platforms.linux; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										24
									
								
								pkgs/by-name/be/betanin/paths.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								pkgs/by-name/be/betanin/paths.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| --- a/betanin/paths.py | ||||
| +++ b/betanin/paths.py | ||||
| @@ -19,11 +19,3 @@ | ||||
|  BEETS_DIR = xdg.BaseDirectory.save_config_path("beets") | ||||
| -CLIENT_DIST_DIR = _first_existing( | ||||
| -    os.path.join(os.getcwd(), "betanin_client", "dist"), | ||||
| -    os.path.join(site.getusersitepackages(), "betanin_client", "dist"), | ||||
| -    os.path.join(site.getsitepackages()[0], "betanin_client", "dist"), | ||||
| -) | ||||
| -MIGRATIONS_DIR = _first_existing( | ||||
| -    os.path.join(os.getcwd(), "betanin_migrations"), | ||||
| -    os.path.join(site.getusersitepackages(), "betanin_migrations"), | ||||
| -    os.path.join(site.getsitepackages()[0], "betanin_migrations"), | ||||
| -) | ||||
| +CLIENT_DIST_DIR = "@clientDistDir@" | ||||
| +MIGRATIONS_DIR = "@out@/lib/@libPrefix@/site-packages/betanin_migrations" | ||||
| @@ -38,6 +38,2 @@ | ||||
|  CONFIG_PATH = os.path.join(CONFIG_DIR, "config.toml") | ||||
| -VERSION_PATH = _first_existing( | ||||
| -    os.path.join(os.getcwd(), "betanin/version.txt"), | ||||
| -    os.path.join(site.getusersitepackages(), "betanin", "version.txt"), | ||||
| -    os.path.join(site.getsitepackages()[0], "betanin", "version.txt"), | ||||
| -) | ||||
| +VERSION_PATH = "@out@/lib/@libPrefix@/site-packages/betanin/version.txt" | ||||
							
								
								
									
										94
									
								
								pkgs/by-name/cu/cura5/package.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								pkgs/by-name/cu/cura5/package.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
| { lib | ||||
| , stdenv | ||||
| , fetchurl | ||||
| , writeScriptBin | ||||
| , appimageTools | ||||
| , copyDesktopItems | ||||
| , makeDesktopItem | ||||
| }: | ||||
|  | ||||
| let | ||||
|   pname = "cura5"; | ||||
|   version = "5.6.0"; | ||||
|   name = "${pname}-${version}"; | ||||
|  | ||||
|   cura5 = appimageTools.wrapType2 { | ||||
|     inherit pname version; | ||||
|     src = fetchurl { | ||||
|       url = "https://github.com/Ultimaker/Cura/releases/download/${version}/Ultimaker-Cura-${version}-linux-X64.AppImage"; | ||||
|       hash = "sha256-EHiWoNpLKHPzv6rZrtNgEr7y//iVcRYeV/TaCn8QpEA="; | ||||
|     }; | ||||
|     extraPkgs = _: [ ]; | ||||
|   }; | ||||
|   script = writeScriptBin pname '' | ||||
|     #!${stdenv.shell} | ||||
|     # AppImage version of Cura loses current working directory and treats all paths relateive to $HOME. | ||||
|     # So we convert each of the files passed as argument to an absolute path. | ||||
|     # This fixes use cases like `cd /path/to/my/files; cura mymodel.stl anothermodel.stl`. | ||||
|  | ||||
|     args=() | ||||
|     for a in "$@"; do | ||||
|       if [ -e "$a" ]; then | ||||
|         a="$(realpath "$a")" | ||||
|       fi | ||||
|       args+=("$a") | ||||
|     done | ||||
|     QT_QPA_PLATFORM=xcb exec "${cura5}/bin/cura5" "''${args[@]}" | ||||
|   ''; | ||||
| in | ||||
| stdenv.mkDerivation rec { | ||||
|   inherit pname version; | ||||
|   dontUnpack = true; | ||||
|  | ||||
|   nativeBuildInputs = [ copyDesktopItems ]; | ||||
|   desktopItems = [ | ||||
|     # Based on upstream. | ||||
|     # https://github.com/Ultimaker/Cura/blob/main/packaging/AppImage/cura.desktop.jinja | ||||
|     (makeDesktopItem { | ||||
|       name = "cura"; | ||||
|       desktopName = "UltiMaker Cura"; | ||||
|       genericName = "3D Printing Software"; | ||||
|       comment = meta.longDescription; | ||||
|       exec = "cura5"; | ||||
|       icon = "cura-icon"; | ||||
|       terminal = false; | ||||
|       type = "Application"; | ||||
|       mimeTypes = [ | ||||
|         "model/stl" | ||||
|         "application/vnd.ms-3mfdocument" | ||||
|         "application/prs.wavefront-obj" | ||||
|         "image/bmp" | ||||
|         "image/gif" | ||||
|         "image/jpeg" | ||||
|         "image/png" | ||||
|         "text/x-gcode" | ||||
|         "application/x-amf" | ||||
|         "application/x-ply" | ||||
|         "application/x-ctm" | ||||
|         "model/vnd.collada+xml" | ||||
|         "model/gltf-binary" | ||||
|         "model/gltf+json" | ||||
|         "model/vnd.collada+xml+zip" | ||||
|       ]; | ||||
|       categories = [ "Graphics" ]; | ||||
|       keywords = [ "3D" "Printing" ]; | ||||
|     }) | ||||
|   ]; | ||||
|  | ||||
|   # TODO: Extract cura-icon from AppImage source. | ||||
|   installPhase = '' | ||||
|     mkdir -p $out/bin | ||||
|     cp ${script}/bin/cura5 $out/bin/cura5 | ||||
|     runHook postInstall | ||||
|   ''; | ||||
|  | ||||
|   meta = { | ||||
|     description = "3D printing software"; | ||||
|     homepage = "https://github.com/ultimaker/cura"; | ||||
|     longDescription = '' | ||||
|       Cura converts 3D models into paths for a 3D printer. It prepares your print for maximum accuracy, minimum printing time and good reliability with many extra features that make your print come out great. | ||||
|     ''; | ||||
|     license = lib.licenses.lgpl3; | ||||
|     platforms = [ "x86_64-linux" ]; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										25
									
								
								pkgs/by-name/ko/koillection/koillection-dirs.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								pkgs/by-name/ko/koillection/koillection-dirs.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| *** a/src/Kernel.php | ||||
| --- b/src/Kernel.php | ||||
| @@ -8,6 +8,21 @@ class Kernel extends BaseKernel | ||||
|  use Symfony\Component\HttpKernel\Kernel as BaseKernel; | ||||
|   | ||||
|  class Kernel extends BaseKernel | ||||
|  { | ||||
|      use MicroKernelTrait; | ||||
| + | ||||
| +    public function getDataDir(): string | ||||
| +    { | ||||
| +        return '@dataDir@'; | ||||
| +    } | ||||
| + | ||||
| +    public function getCacheDir(): string | ||||
| +    { | ||||
| +        return $this->getDataDir() . '/var/cache/' . $this->getEnvironment(); | ||||
| +    } | ||||
| + | ||||
| +    public function getLogDir(): string | ||||
| +    { | ||||
| +        return $this->getDataDir() . '/var/logs'; | ||||
| +    } | ||||
|  } | ||||
|  | ||||
							
								
								
									
										69
									
								
								pkgs/by-name/ko/koillection/package.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								pkgs/by-name/ko/koillection/package.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| { lib | ||||
| , dataDir ? "/var/lib/koillection" | ||||
|   # REVIEW: This supposed to be aliased by the caller, which means it shouldn't | ||||
|   # go in by-name, I think. | ||||
| , php83 | ||||
| , fetchFromGitHub | ||||
| , mkYarnPackage | ||||
| , fetchYarnDeps | ||||
| }: | ||||
|  | ||||
| php83.buildComposerProject (finalAttrs: { | ||||
|   pname = "koillection"; | ||||
|   version = "1.5.2"; | ||||
|  | ||||
|   src = fetchFromGitHub { | ||||
|     owner = "benjaminjonard"; | ||||
|     repo = "koillection"; | ||||
|     rev = finalAttrs.version; | ||||
|     hash = "sha256-r2rkHhp0F5QfwJuKeu4UdPoluDXxpyhYpie1zUk1h5c="; | ||||
|   }; | ||||
|  | ||||
|   frontend = mkYarnPackage { | ||||
|     inherit (finalAttrs) pname version; | ||||
|  | ||||
|     src = "${finalAttrs.src}/assets"; | ||||
|  | ||||
|     offlineCache = fetchYarnDeps { | ||||
|       yarnLock = "${finalAttrs.src}/assets/yarn.lock"; | ||||
|       hash = ""; | ||||
|     }; | ||||
|   }; | ||||
|  | ||||
|   patches = [ | ||||
|     ./koillection-dirs.patch | ||||
|   ]; | ||||
|  | ||||
|   postPatch = '' | ||||
|     substituteInPlace src/Kernel.php \ | ||||
|       --replace "@dataDir@" "${dataDir}" | ||||
|   ''; | ||||
|  | ||||
|   # Lock file uses exact constraints, which Composer doesn't like. | ||||
|   composerStrictValidation = false; | ||||
|   # Actually installs plugins, i.e., Symfony. | ||||
|   composerNoPlugins = false; | ||||
|   vendorHash = "sha256-LU9ZN4qUNUpSBGH6AChw3qU4RjgsoPJmLL01FS7UKRQ="; | ||||
|  | ||||
|   postInstall = '' | ||||
|     local koillection_out=$out/share/php/koillection | ||||
|  | ||||
|     rm -R $koillection_out/public/uploads | ||||
|     ln -s ${dataDir}/.env $koillection_out/.env.local | ||||
|     ln -s ${dataDir}/public/uploads $koillection_out/public/uploads | ||||
|  | ||||
|     cp -r ${finalAttrs.frontend} assets/ | ||||
|   ''; | ||||
|  | ||||
|   passthru = { | ||||
|     phpPackage = php83; | ||||
|   }; | ||||
|  | ||||
|   meta = { | ||||
|     description = "Self-hosted service allowing users to manage any kind of collections"; | ||||
|     homepage = "https://github.com/benjaminjonard/koillection"; | ||||
|     license = lib.licenses.mit; | ||||
|     platforms = lib.platforms.unix; | ||||
|     broken = true; # Blocked on NixOS/nixpkgs#254369 | ||||
|   }; | ||||
| }) | ||||
| @@ -1,7 +1,7 @@ | ||||
| { stdenv | ||||
| , lib | ||||
| , fetchFromGitHub | ||||
| 
 | ||||
| , coreutils | ||||
| , autoreconfHook | ||||
| }: | ||||
| 
 | ||||
| @@ -26,7 +26,7 @@ stdenv.mkDerivation rec { | ||||
|     mkdir -p $out/include $out/lib | ||||
|   ''; | ||||
| 
 | ||||
|   meta = with stdenv.lib; { | ||||
|   meta = with 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 = licenses.lgpl3; | ||||
| @@ -1,4 +1,5 @@ | ||||
| { stdenv | ||||
| , lib | ||||
| , fetchFromGitHub | ||||
| 
 | ||||
| , autoreconfHook | ||||
| @@ -25,10 +26,10 @@ stdenv.mkDerivation rec { | ||||
| 
 | ||||
|   configureFlags = [ "--with-moduledir=\${out}/lib/security" ]; | ||||
| 
 | ||||
|   meta = with stdenv.lib; { | ||||
|   meta = with lib; { | ||||
|     homepage = "https://github.com/cruegge/pam-gnupg"; | ||||
|     description = "Unlock GnuPG keys on login"; | ||||
|     license = licenses.gpl3; | ||||
|     inherit (pam.meta) platforms; | ||||
|     platforms = pam.meta.platforms; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										25
									
								
								pkgs/by-name/po/porkbun-ddns/package.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								pkgs/by-name/po/porkbun-ddns/package.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| { lib | ||||
| , stdenv | ||||
| , python3 | ||||
| }: | ||||
| let | ||||
|   python = python3.withPackages (py: [ py.requests ]); | ||||
| in | ||||
| stdenv.mkDerivation { | ||||
|   name = "porkbun-ddns"; | ||||
|  | ||||
|   src = ./.; | ||||
|   inherit python; | ||||
|  | ||||
|   installPhase = '' | ||||
|     mkdir -p $out/bin | ||||
|     install -Dm0755 $src/porkbun-ddns.py $out/bin/porkbun-ddns | ||||
|     substituteAllInPlace $out/bin/porkbun-ddns | ||||
|   ''; | ||||
|  | ||||
|   meta = { | ||||
|     description = "Porkbun dynamic DNS script"; | ||||
|     license = lib.licenses.gpl3; | ||||
|     platforms = python.meta.platforms; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										176
									
								
								pkgs/by-name/po/porkbun-ddns/porkbun-ddns.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								pkgs/by-name/po/porkbun-ddns/porkbun-ddns.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,176 @@ | ||||
| #!@python@/bin/python | ||||
|  | ||||
| import argparse | ||||
| import json | ||||
| import os | ||||
| import re | ||||
| import requests | ||||
| from dataclasses import dataclass, fields as datafields | ||||
| from enum import Enum, unique | ||||
| from typing import List, Optional | ||||
|  | ||||
| APIBASE = "https://porkbun.com/api/json/v3/dns" | ||||
|  | ||||
|  | ||||
| def dataclass_from_dict(klass: object, d: dict): | ||||
|     try: | ||||
|         fieldtypes = {f.name: f.type for f in datafields(klass)} | ||||
|         return klass(**{f: dataclass_from_dict(fieldtypes[f], d[f]) for f in d}) | ||||
|     except: | ||||
|         return d  # Not a dataclass field | ||||
|  | ||||
|  | ||||
| def remove_domain(domain: str, name: str): | ||||
|     return re.sub(f"\\.?{domain}$", "", name) | ||||
|  | ||||
|  | ||||
| @unique | ||||
| class RecordType(Enum): | ||||
|     a = "A" | ||||
|     aaaa = "AAAA" | ||||
|     cname = "CNAME" | ||||
|     mx = "MX" | ||||
|     srv = "SRV" | ||||
|     txt = "TXT" | ||||
|  | ||||
|  | ||||
| @dataclass | ||||
| class Record: | ||||
|     id: str | ||||
|     name: str | ||||
|     type: str | ||||
|     content: str | ||||
|     ttl: str | ||||
|     prio: str = "" | ||||
|     notes: str = "" | ||||
|  | ||||
|  | ||||
| @dataclass | ||||
| class Retrieval: | ||||
|     status: str | ||||
|     records: List[Record] | ||||
|  | ||||
|  | ||||
| class ApiError(Exception): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class ArgumentError(Exception): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class PorkbunClient: | ||||
|     def __init__(self, apikey: str, secretapikey: str): | ||||
|         self.apikey = apikey | ||||
|         self.secretapikey = secretapikey | ||||
|  | ||||
|     def _make_payload(self, **kwargs): | ||||
|         return json.dumps( | ||||
|             {"apikey": self.apikey, "secretapikey": self.secretapikey, **kwargs} | ||||
|         ) | ||||
|  | ||||
|     def edit_record( | ||||
|         self, | ||||
|         domain: str, | ||||
|         record: Record, | ||||
|         name: Optional[str] = None, | ||||
|         type: Optional[RecordType] = None, | ||||
|         content: Optional[str] = None, | ||||
|         ttl: Optional[int] = None, | ||||
|         priority: Optional[str] = None, | ||||
|     ) -> bool: | ||||
|         return self.edit( | ||||
|             domain, | ||||
|             record.id, | ||||
|             name=name or record.name, | ||||
|             type=type or RecordType(record.type), | ||||
|             content=content or record.content, | ||||
|             ttl=ttl or record.ttl, | ||||
|             priority=priority or record.prio, | ||||
|         ) | ||||
|  | ||||
|     def edit( | ||||
|         self, | ||||
|         domain: str, | ||||
|         id: str, | ||||
|         name: str, | ||||
|         type: RecordType, | ||||
|         content: str, | ||||
|         ttl: int = 300, | ||||
|         priority: Optional[str] = None, | ||||
|     ) -> bool: | ||||
|         # API returns FQN name rather than the actual prefix, so scrub it | ||||
|         name = remove_domain(domain, name) | ||||
|         payload = self._make_payload( | ||||
|             name=name, type=type.value, content=content, ttl=str(ttl), prio=priority | ||||
|         ) | ||||
|         res = requests.post(f"{APIBASE}/edit/{domain}/{id}", data=payload) | ||||
|         body = res.json() | ||||
|         if body["status"] != "SUCCESS": | ||||
|             raise ApiError(body["message"]) | ||||
|         return True | ||||
|  | ||||
|     def delete(self, domain: str, id: str) -> bool: | ||||
|         payload = self._make_payload() | ||||
|         res = requests.post(f"{APIBASE}/delete/{domain}/{id}", data=payload) | ||||
|         body = res.json() | ||||
|         if body["status"] != "SUCCESS": | ||||
|             raise ApiError(body["message"]) | ||||
|         return True | ||||
|  | ||||
|     def retrieve(self, domain: str) -> List[Retrieval]: | ||||
|         payload = self._make_payload() | ||||
|         res = requests.post(f"{APIBASE}/retrieve/{domain}", data=payload) | ||||
|         body = res.json() | ||||
|         if body["status"] != "SUCCESS": | ||||
|             raise ApiError(body["message"]) | ||||
|         return [dataclass_from_dict(Record, d) for d in body["records"]] | ||||
|  | ||||
|  | ||||
| def current_ip() -> str: | ||||
|     return requests.get("https://ifconfig.me").text | ||||
|  | ||||
|  | ||||
| def _load_key(key: Optional[str], keyfile: Optional[str]) -> str: | ||||
|     if keyfile is not None: | ||||
|         with open(keyfile) as f: | ||||
|             return f.read().strip() | ||||
|     if key is not None: | ||||
|         return key | ||||
|     raise ArgumentError("key or key file is required") | ||||
|  | ||||
|  | ||||
| if __name__ == "__main__": | ||||
|     parser = argparse.ArgumentParser(description="Wrapper around Porkbun DNS API") | ||||
|     keyarg = parser.add_mutually_exclusive_group(required=True) | ||||
|     keyarg.add_argument("-k", "--key", metavar="KEY", type=str, help="API key") | ||||
|     keyarg.add_argument( | ||||
|         "-K", "--key-file", metavar="FILE", type=str, help="API key file" | ||||
|     ) | ||||
|     secretarg = parser.add_mutually_exclusive_group(required=True) | ||||
|     secretarg.add_argument( | ||||
|         "-s", "--secret", metavar="SECRET", type=str, help="secret API key" | ||||
|     ) | ||||
|     secretarg.add_argument( | ||||
|         "-S", "--secret-file", metavar="FILE", type=str, help="secret API key file" | ||||
|     ) | ||||
|     parser.add_argument("domains", type=str, nargs="+", help="domain(s) to update") | ||||
|  | ||||
|     args = parser.parse_args() | ||||
|     try: | ||||
|         apikey = _load_key(args.key, args.key_file) | ||||
|         secretapikey = _load_key(args.secret, args.secret_file) | ||||
|     except Exception as e: | ||||
|         print("error: " + str(e)) | ||||
|         parser.print_help() | ||||
|         exit(1) | ||||
|  | ||||
|     current_ip = current_ip() | ||||
|     client = PorkbunClient(apikey, secretapikey) | ||||
|     for domain in args.domains: | ||||
|         recs = client.retrieve(domain) | ||||
|         arecs = [r for r in recs if r.type == RecordType.a.value] | ||||
|         for arec in arecs: | ||||
|             if arec.content != current_ip: | ||||
|                 client.edit_record(domain, arec, content=current_ip) | ||||
|                 print(f"Pointed '{arec.name}' to {current_ip}") | ||||
| @@ -1,9 +1,10 @@ | ||||
| { stdenv | ||||
| { lib | ||||
| , fetchFromGitHub | ||||
| , rustPlatform | ||||
| 
 | ||||
| , cmake | ||||
| , pkg-config | ||||
| , alsa-lib | ||||
| , dbus | ||||
| , openssl | ||||
| 
 | ||||
|   # GUI | ||||
| @@ -14,27 +15,27 @@ | ||||
| }: | ||||
| 
 | ||||
| let | ||||
|   inherit (stdenv.lib) optional optionals; | ||||
|   inherit (lib) optional optionals; | ||||
| in | ||||
| 
 | ||||
| assert withGui -> gtk3.meta.available; | ||||
| 
 | ||||
| rustPlatform.buildRustPackage rec { | ||||
|   pname = "psst"; | ||||
|   version = "20210122.gec114ac"; | ||||
|   version = "20221012.d70ed81"; | ||||
|   src = fetchFromGitHub { | ||||
|     owner = "jpochyla"; | ||||
|     repo = "psst"; | ||||
|     rev = "ec114ac8299179c8dd51bc026d6060dc75658b83"; | ||||
|     sha256 = "02mh6hjnlimadc3w899hccss31p1r4sxgb5880zwn7yiycbq3yyj"; | ||||
|     rev = "d70ed8104533dc15bc36b989ba8428872c9b578f"; | ||||
|     hash = "sha256-ZKhHN0ruLb6ZVKkrKv/YawRsVop6SP1QF/nrtkmA8P8="; | ||||
|     fetchSubmodules = true; | ||||
|   }; | ||||
|   cargoSha256 = "1m01rycnpy9asspih1x9l5ppfbjnqcfdycmzgkrmdwzah3x8s8xc"; | ||||
|   cargoSha256 = "sha256-zH6+EV78FDVOYEFXk0f54pH2Su0QpK1I0bHqzIiMdBo="; | ||||
| 
 | ||||
|   nativeBuildInputs = [ pkg-config ] | ||||
|     ++ optional withGui copyDesktopItems; | ||||
| 
 | ||||
|   buildInputs = [ openssl ] | ||||
|   buildInputs = [ alsa-lib dbus openssl ] | ||||
|     ++ optional withGui gtk3; | ||||
| 
 | ||||
|   cargoBuildFlags = optionals (!withGui) [ | ||||
| @@ -54,16 +55,16 @@ rustPlatform.buildRustPackage rec { | ||||
|       name = pname; | ||||
|       desktopName = "psst"; | ||||
|       genericName = "Spotify Player"; | ||||
|       categories = "AudioVideo;Audio;Network;Player;"; | ||||
|       categories = [ "AudioVideo" "Audio" "Network" "Player" ]; | ||||
|       comment = "Spotify client with native GUI"; | ||||
|       exec = "psst-gui"; | ||||
|       extraEntries = "Keywords=spotify;music;"; | ||||
|       keywords = [ "spotify" "music" ]; | ||||
|       icon = "spotify"; | ||||
|       type = "Application"; | ||||
|     }) | ||||
|   ]; | ||||
| 
 | ||||
|   meta = with stdenv.lib; { | ||||
|   meta = with lib; { | ||||
|     description = "Fast and multi-platform Spotify client with native GUI "; | ||||
|     homepage = "https://github.com/jpochyla/psst"; | ||||
|     license = licenses.mit; | ||||
| @@ -2,7 +2,7 @@ diff --git a/setup.py b/setup.py | ||||
| index a800b3b..8967921 100755
 | ||||
| --- a/setup.py
 | ||||
| +++ b/setup.py
 | ||||
| @@ -22,14 +22,13 @@ setup(
 | ||||
| @@ -33,14 +33,13 @@ setup(
 | ||||
|      name='spotify-ripper', | ||||
|      version='2.9.1', | ||||
|      packages=find_packages(exclude=["tests"]), | ||||
| @@ -18,11 +18,7 @@ index a800b3b..8967921 100755 | ||||
|          ], | ||||
|      }, | ||||
|   | ||||
| @@ -67,7 +66,5 @@ setup(
 | ||||
|          'Programming Language :: Python :: 3', | ||||
|          'Programming Language :: Python :: 3.4', | ||||
|      ], | ||||
| -    long_description=_read('README.rst'),
 | ||||
|  ) | ||||
| @@ -121,3 +121,2 @@ setup(
 | ||||
|      return True | ||||
|   | ||||
| -create_default_dir()
 | ||||
| @@ -1,54 +1,64 @@ | ||||
| { stdenv | ||||
| { lib | ||||
| , fetchFromGitHub | ||||
| 
 | ||||
| , python2Packages | ||||
| , python3Packages | ||||
| , lame | ||||
| 
 | ||||
| , aacSupport ? false, faac | ||||
| , alacSupport ? false, libav | ||||
| , flacSupport ? false, flac | ||||
| , m4aSupport ? false, mp4Support ? false, fdk-aac-encoder | ||||
| , oggSupport ? false, vorbisTools | ||||
| , opusSupport ? false, opusTools | ||||
| , aacSupport ? false | ||||
| , faac | ||||
| , alacSupport ? false | ||||
| , libav | ||||
| , flacSupport ? false | ||||
| , flac | ||||
| , m4aSupport ? false | ||||
| , mp4Support ? false | ||||
| , fdk-aac-encoder | ||||
| , oggSupport ? false | ||||
| , vorbis-tools | ||||
| , opusSupport ? false | ||||
| , opusTools | ||||
| }: | ||||
| 
 | ||||
| assert aacSupport -> faac.meta.available; | ||||
| assert alacSupport -> libav.meta.available; | ||||
| assert flacSupport -> flac.meta.available; | ||||
| assert m4aSupport || mp4Support -> fdk-aac-encoder.meta.available; | ||||
| assert oggSupport               -> vorbisTools.meta.available; | ||||
| assert oggSupport -> vorbis-tools.meta.available; | ||||
| assert opusSupport -> opusTools.meta.available; | ||||
| 
 | ||||
| python2Packages.buildPythonApplication rec { | ||||
| python3Packages.buildPythonApplication rec { | ||||
|   pname = "spotify-ripper"; | ||||
|   version = "20161231.gd046419"; | ||||
|   version = "20210724.5bfd3f7"; | ||||
| 
 | ||||
|   src = fetchFromGitHub { | ||||
|     owner = "hbashton"; | ||||
|     owner = "ast261"; | ||||
|     repo = pname; | ||||
|     rev = "d0464193dead7bd3ac7580e98bde86a0f323acae"; | ||||
|     sha256 = "003d6br20f1cf4qvmpl62bk0k4h4v66ib76wn36c23bnh9x5q806"; | ||||
|     rev = "5bfd3f7a52f2767b433fd315145409837a3c33f0"; | ||||
|     sha256 = "sha256-LLunGzs9Mg4S00Su260b+M5w/XwS+kICl/YXQdR/cPI="; | ||||
|   }; | ||||
| 
 | ||||
|   propagatedBuildInputs = (with python2Packages; [ | ||||
|   propagatedBuildInputs = (with python3Packages; [ | ||||
|     colorama | ||||
|     mutagen | ||||
|     pyspotify | ||||
|     requests | ||||
|     schedule | ||||
|     setuptools | ||||
|     spotipy | ||||
|   ]) ++ [ | ||||
|     lame | ||||
|     (if flacSupport then flac else null) | ||||
|     (if alacSupport then libav else null) | ||||
|     (if aacSupport then faac else null) | ||||
|     (if (m4aSupport || mp4Support) then fdk-aac-encoder else null) | ||||
|     (if oggSupport then vorbisTools else null) | ||||
|     (if oggSupport then vorbis-tools else null) | ||||
|     (if opusSupport then opusTools else null) | ||||
|   ]; | ||||
| 
 | ||||
|   # Remove impure executables. | ||||
|   patches = [ ./fix-setup.patch ]; | ||||
| 
 | ||||
|   meta = { | ||||
|   meta = with lib; { | ||||
|     description = "Rip Spotify URIs to audio files, including ID3 tags and cover art"; | ||||
|     longDescription = '' | ||||
|       Spotify-ripper is a small ripper script for Spotify that rips Spotify URIs | ||||
| @@ -58,6 +68,6 @@ python2Packages.buildPythonApplication rec { | ||||
|     ''; | ||||
|     homepage = "https://github.com/hbashton/spotify-ripper"; | ||||
|     # spotify-ripper itself is MIT, but the upstream libspotify is unfree. | ||||
|     license = stdenv.lib.licenses.unfree; | ||||
|     license = licenses.unfree; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										16
									
								
								pkgs/by-name/th/thor/nugetDeps.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								pkgs/by-name/th/thor/nugetDeps.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| # This file was automatically generated by passthru.fetch-deps. | ||||
| # Please dont edit it manually, your changes might get overwritten! | ||||
|  | ||||
| { fetchNuGet }: [ | ||||
|   (fetchNuGet { pname = "K4os.Compression.LZ4"; version = "1.3.5"; sha256 = "1nv9inhz0n25lhkw9xgp6g5xbqmcdccdhx6mwrli0pdp6hjmlh9k"; }) | ||||
|   (fetchNuGet { pname = "K4os.Compression.LZ4.Streams"; version = "1.3.5"; sha256 = "09m0jxq6558r1v1l4rsc8c0n6nlacz2d8c03as6kvvvz2gr7h506"; }) | ||||
|   (fetchNuGet { pname = "K4os.Hash.xxHash"; version = "1.0.8"; sha256 = "0vz1f81z4rh7a576fdzbc6wmj7p4gaca1rch3anvh1s5qd7xdd10"; }) | ||||
|   (fetchNuGet { pname = "Serilog"; version = "3.0.0-dev-02022"; sha256 = "0c7gqhzkcdzmhycq60mzwqwcycl99ksk4q0pmwz140japasfhcqk"; }) | ||||
|   (fetchNuGet { pname = "Serilog.Exceptions"; version = "8.4.0"; sha256 = "1v0rnhr616wj85gb6wvafj22kvnphp7m9vsyalcc25hwa1jvlryr"; }) | ||||
|   (fetchNuGet { pname = "Serilog.Sinks.Console"; version = "4.1.1-dev-00910"; sha256 = "00h3sd0lxnx53jmgqh84pw73zk3d710dvlgkf4x135vfhax9bw7m"; }) | ||||
|   (fetchNuGet { pname = "SharpCompress"; version = "0.33.0"; sha256 = "1j94hfjvkygpp97svv75jay0rmnx9ygg86d5syyahl9hayns4ig9"; }) | ||||
|   (fetchNuGet { pname = "Spectre.Console"; version = "0.47.1-preview.0.8"; sha256 = "1r6v16lh7mqxxh3j9lqryif8skx3q9nkgf5gnp5xpc4im3a52wql"; }) | ||||
|   (fetchNuGet { pname = "System.IO.Pipelines"; version = "6.0.3"; sha256 = "1jgdazpmwc21dd9naq3l9n5s8a1jnbwlvgkf1pnm0aji6jd4xqdz"; }) | ||||
|   (fetchNuGet { pname = "System.Memory"; version = "4.5.5"; sha256 = "08jsfwimcarfzrhlyvjjid61j02irx6xsklf32rv57x2aaikvx0h"; }) | ||||
|   (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.7.0"; sha256 = "04qw9km34pmzr2alckb3mqdb4fpqwlvzk59lg8c7jfidghcl4jqq"; }) | ||||
| ] | ||||
							
								
								
									
										32
									
								
								pkgs/by-name/th/thor/package.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								pkgs/by-name/th/thor/package.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| { lib | ||||
| , fetchFromGitHub | ||||
| , buildDotnetModule | ||||
| , dotnetCorePackages | ||||
| }: | ||||
|  | ||||
| buildDotnetModule rec { | ||||
|   pname = "thor"; | ||||
|   version = "1.0.4"; | ||||
|  | ||||
|   src = fetchFromGitHub { | ||||
|     owner = "Samsung-Loki"; | ||||
|     repo = "Thor"; | ||||
|     rev = version; | ||||
|     hash = "sha256-tYzPpgbM9rCDdLW0ERZWmmxzMYpe1BNyFwmpaLQXRGQ="; | ||||
|   }; | ||||
|  | ||||
|   dotnet-sdk = dotnetCorePackages.sdk_7_0; | ||||
|   dotnet-runtime = dotnetCorePackages.runtime_7_0; | ||||
|   nugetDeps = ./nugetDeps.nix; | ||||
|   projectFile = "TheAirBlow.Thor.Shell/TheAirBlow.Thor.Shell.csproj"; | ||||
|  | ||||
|   postFixup = '' | ||||
|     mv $out/bin/TheAirBlow.Thor.Shell $out/bin/thor | ||||
|   ''; | ||||
|  | ||||
|   meta = { | ||||
|     homepage = "https://github.com/Samsung-Loki/Thor"; | ||||
|     description = "An alternative to Heimdall"; | ||||
|     license = lib.licenses.mpl20; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										27
									
								
								pkgs/by-name/wg/wg2nd/package.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								pkgs/by-name/wg/wg2nd/package.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| { lib | ||||
| , stdenv | ||||
| , fetchFromGitHub | ||||
| , libcap | ||||
| }: stdenv.mkDerivation { | ||||
|   pname = "wg2nd"; | ||||
|   version = "20240605.23a3710"; | ||||
|   src = fetchFromGitHub { | ||||
|     owner = "flu0r1ne"; | ||||
|     repo = "wg2nd"; | ||||
|     rev = "23a37100f121edd0c1291c4a78901662eae5d58b"; | ||||
|     hash = "sha256-XY19Vicg8l/2stlWj1QqJt0pJOi/kueQpBufVlLJVxk="; | ||||
|   }; | ||||
|  | ||||
|   buildInputs = [ libcap ]; | ||||
|  | ||||
|   installPhase = '' | ||||
|     PREFIX=$out BINDIR=/bin make install | ||||
|   ''; | ||||
|  | ||||
|   meta = { | ||||
|     description = "WireGuard to systemd-networkd Configuration Converter"; | ||||
|     homepage = "https://git.flu0r1ine.net/wg2nd/about"; | ||||
|     license = [ lib.licenses.gpl2Only lib.licenses.mit ]; | ||||
|     platforms = lib.platforms.linux; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										38
									
								
								pkgs/by-name/yt/ytarchive/package.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								pkgs/by-name/yt/ytarchive/package.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| { stdenv | ||||
| , lib | ||||
| , fetchFromGitHub | ||||
| , python3 | ||||
| , ffmpeg | ||||
| }: | ||||
|  | ||||
| stdenv.mkDerivation rec { | ||||
|   pname = "ytarchive"; | ||||
|   version = "0.2.2+0304577"; | ||||
|  | ||||
|   src = fetchFromGitHub { | ||||
|     owner = "Kethsar"; | ||||
|     repo = "ytarchive"; | ||||
|     # NOTE: Last revision where it was written in Python, so don't change | ||||
|     #   without rewriting the derivation. | ||||
|     rev = "030457749d6c8d1d62240bfbad659326f3cd3a30"; | ||||
|     hash = "sha256-mvmdkxZxlEbWc7GR8LfyxTJOeEhjCoYyeatDx8l1uhM="; | ||||
|   }; | ||||
|  | ||||
|   propagatedBuildInputs = [ | ||||
|     python3 | ||||
|     ffmpeg | ||||
|   ]; | ||||
|  | ||||
|   phases = [ "unpackPhase" "installPhase" "fixupPhase" ]; | ||||
|  | ||||
|   installPhase = '' | ||||
|     install -Dm00755 ytarchive.py $out/bin/ytarchive | ||||
|   ''; | ||||
|  | ||||
|   meta = with lib; { | ||||
|     description = "Garbage Youtube livestream downloader"; | ||||
|     homepage = "https://github.com/Kethsar/ytarchive"; | ||||
|     license = licenses.mit; | ||||
|     platforms = python3.meta.platforms; | ||||
|   }; | ||||
| } | ||||
| @@ -1,4 +1,5 @@ | ||||
| { stdenv | ||||
| , lib | ||||
| , fetchFromGitHub | ||||
| , installShellFiles | ||||
| 
 | ||||
| @@ -25,10 +26,10 @@ stdenv.mkDerivation { | ||||
|     installShellCompletion --zsh _zshz | ||||
|   ''; | ||||
| 
 | ||||
|   meta = { | ||||
|   meta = with lib; { | ||||
|     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; | ||||
|     license = licenses.mit; | ||||
|     platforms = zsh.meta.platforms; | ||||
|   }; | ||||
| } | ||||
| @@ -1,67 +0,0 @@ | ||||
| { stdenv | ||||
| , fetchFromGitHub | ||||
| , buildGoModule | ||||
| , makeWrapper | ||||
|  | ||||
| , go | ||||
| , pkg-config | ||||
| , qmake | ||||
| , removeReferencesTo | ||||
| }: | ||||
|  | ||||
| buildGoModule rec { | ||||
|   pname = "go-qt"; | ||||
|   version = "20200904.gc0c124a"; | ||||
|  | ||||
|   src = fetchFromGitHub { | ||||
|     owner = "therecipe"; | ||||
|     repo = "qt"; | ||||
|     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/..." ]; | ||||
|  | ||||
|   nativeBuildInputs = [ makeWrapper ]; | ||||
|  | ||||
|   # Fixes inconsistent vendoring. | ||||
|   postPatch = '' | ||||
|     cat <<EOM >>go.mod | ||||
|     require ( | ||||
|       github.com/therecipe/env_darwin_amd64_513 v0.0.0-20190626001412-d8e92e8db4d0 | ||||
|       github.com/therecipe/env_linux_amd64_513 v0.0.0-20190626000307-e137a3934da6 | ||||
|       github.com/therecipe/env_windows_amd64_513 v0.0.0-20190626000028-79ec8bd06fb2 | ||||
|       github.com/therecipe/env_windows_amd64_513/Tools v0.0.0-20190626000028-79ec8bd06fb2 | ||||
|       github.com/therecipe/qt/internal/binding/files/docs/5.12.0 v0.0.0-20200904063919-c0c124a5770d | ||||
|       github.com/therecipe/qt/internal/binding/files/docs/5.13.0 v0.0.0-20200904063919-c0c124a5770d | ||||
|     ) | ||||
|     EOM | ||||
|   ''; | ||||
|  | ||||
|   doCheck = true; | ||||
|   checkPhase = '' | ||||
|     $GOPATH/bin/qtsetup test | ||||
|   ''; | ||||
|  | ||||
|   postFixup = '' | ||||
|     for bin in $out/bin/*; do | ||||
|       wrapProgram $bin \ | ||||
|         --set QT_PKG_CONFIG true \ | ||||
|         --prefix PATH : ${pkg-config}/bin \ | ||||
|         --prefix PATH : ${qmake}/bin | ||||
|     done | ||||
|   ''; | ||||
|  | ||||
|   meta = with stdenv.lib; { | ||||
|     homepage = "https://github.com/therecipe/qt"; | ||||
|     description = "Qt bindings for Go"; | ||||
|     license = licenses.lgpl3; | ||||
|   }; | ||||
| } | ||||
| @@ -1,111 +0,0 @@ | ||||
| # file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix) | ||||
| [ | ||||
|   { | ||||
|     goPackagePath = "github.com/davecgh/go-spew"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/davecgh/go-spew"; | ||||
|       rev = "v1.1.1"; | ||||
|       sha256 = "0hka6hmyvp701adzag2g26cxdj47g21x6jz4sc6jjz1mn59d474y"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/gopherjs/gopherjs"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/gopherjs/gopherjs"; | ||||
|       rev = "bd77b112433e"; | ||||
|       sha256 = "0bsj69jb0glfvqhqld4c78840iagd0iy2b92878i5w4sgp40k7i1"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/konsorten/go-windows-terminal-sequences"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/konsorten/go-windows-terminal-sequences"; | ||||
|       rev = "v1.0.2"; | ||||
|       sha256 = "09mn209ika7ciy87xf2x31dq5fnqw39jidgaljvmqxwk7ff1hnx7"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/pmezard/go-difflib"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/pmezard/go-difflib"; | ||||
|       rev = "v1.0.0"; | ||||
|       sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/sirupsen/logrus"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/sirupsen/logrus"; | ||||
|       rev = "v1.4.1"; | ||||
|       sha256 = "1m7ny9jkb98cxqhsp13xa5hnqh1s9f25x04q6arsala4zswsw33c"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/stretchr/objx"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/stretchr/objx"; | ||||
|       rev = "v0.2.0"; | ||||
|       sha256 = "0pcdvakxgddaiwcdj73ra4da05a3q4cgwbpm2w75ycq4kzv8ij8k"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "github.com/stretchr/testify"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/stretchr/testify"; | ||||
|       rev = "v1.3.0"; | ||||
|       sha256 = "0wjchp2c8xbgcbbq32w3kvblk6q6yn533g78nxl6iskq6y95lxsy"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "golang.org/x/crypto"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/golang/crypto"; | ||||
|       rev = "df01cb2cc480549d72034218dd98bf97671450ac"; | ||||
|       sha256 = "1fhz0rym06j0fds0wg8xf6i9mm37m6qgdv83qxfh3nh0mgzf19qs"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "golang.org/x/net"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/golang/net"; | ||||
|       rev = "afa5a82059c6356159f699d81beff22a81842231"; | ||||
|       sha256 = "1zhcr1m7n550m0lqjqg1rl2qrnghkl3a25vcm6cgpiqvk89f8lba"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "golang.org/x/sys"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/golang/sys"; | ||||
|       rev = "e8e3143a4f4a00f1fafef0dd82ba78223281b01b"; | ||||
|       sha256 = "02pdj4gr658r99kqwxy6v4lb8w2h0zaiqq1jyqrsxqiyapijhw87"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "golang.org/x/text"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/golang/text"; | ||||
|       rev = "f4905fbd45b6790792202848439271c74074bbfd"; | ||||
|       sha256 = "184d6ap2g92jvx0532lymdqbnx9vi9ips4dq5lnqbby0caccc6r1"; | ||||
|     }; | ||||
|   } | ||||
|   { | ||||
|     goPackagePath = "golang.org/x/tools"; | ||||
|     fetch = { | ||||
|       type = "git"; | ||||
|       url = "https://github.com/golang/tools"; | ||||
|       rev = "aa740d4807891cb493e9f727901baf334b9fabce"; | ||||
|       sha256 = "0431y2xw39dss0ldxhbmm7ip4d2cr2w9km2a5psgwan6v481kz0a"; | ||||
|     }; | ||||
|   } | ||||
| ] | ||||
| @@ -1,4 +1,4 @@ | ||||
| { stdenv | ||||
| { lib | ||||
| , buildPythonPackage | ||||
| , fetchPypi | ||||
| }: | ||||
| @@ -14,9 +14,9 @@ buildPythonPackage rec { | ||||
|  | ||||
|   doCheck = false; | ||||
|  | ||||
|   meta = { | ||||
|   meta = with lib; { | ||||
|     homepage = "https://stuffivelearned.org/doku.php?id=programming:python:py-sonic"; | ||||
|     license = stdenv.lib.licenses.gpl3; | ||||
|     license = licenses.gpl3; | ||||
|     description = "A python wrapper library for the Subsonic REST API"; | ||||
|   }; | ||||
| } | ||||
|   | ||||
| @@ -1,16 +1,18 @@ | ||||
| { stdenv | ||||
| , lib | ||||
| , fetchFromGitHub | ||||
|  | ||||
| , qtbase | ||||
| , qmake | ||||
| , wrapQtAppsHook ? null # Temporary backwards compatibility | ||||
| }: | ||||
|  | ||||
| stdenv.mkDerivation rec { | ||||
|   pname = "radeon-profile-daemon"; | ||||
|   version = "20190603.g06qxq2h"; | ||||
|  | ||||
|   nativeBuildInputs = [ qmake ]; | ||||
|   buildInputs = [ qtbase ]; | ||||
|   nativeBuildInputs = [ qmake wrapQtAppsHook ]; | ||||
|  | ||||
|   src = ( | ||||
|     fetchFromGitHub { | ||||
| @@ -26,7 +28,7 @@ stdenv.mkDerivation rec { | ||||
|       --replace "/usr/" "$out/" | ||||
|   ''; | ||||
|  | ||||
|   meta = with stdenv.lib; { | ||||
|   meta = with lib; { | ||||
|     description = "System daemon for reading current clocks of AMD Radeon cards"; | ||||
|     homepage = "https://github.com/marazmista/radeon-profile-daemon"; | ||||
|     license = licenses.gpl2Plus; | ||||
|   | ||||
| @@ -1,49 +0,0 @@ | ||||
| { stdenv | ||||
| , fetchFromGitHub | ||||
| , makeWrapper | ||||
|  | ||||
| , curl | ||||
| , gnumake | ||||
| , gnutls | ||||
| , gtk3 | ||||
| , gtkmm3 | ||||
| , pkg-config | ||||
| , yajl | ||||
| }: | ||||
|  | ||||
| stdenv.mkDerivation rec { | ||||
|   pname = "SamRewritten"; | ||||
|   version = "2.1"; | ||||
|  | ||||
|   src = fetchFromGitHub { | ||||
|     owner = "PaulCombal"; | ||||
|     repo = pname; | ||||
|     rev = "202008"; | ||||
|     sha256 = "ab7903b997675b0d4d7eede15430fc5ca2736e6c25c7f95a7c97e1ce25582a1c"; | ||||
|   }; | ||||
|  | ||||
|   nativeBuildInputs = [ gnumake pkg-config ]; | ||||
|   buildInputs = [ | ||||
|     curl | ||||
|     gnutls | ||||
|     gtk3 | ||||
|     gtkmm3 | ||||
|     yajl | ||||
|   ]; | ||||
|  | ||||
|   NIX_CFLAGS_LINK = "-pthread"; | ||||
|  | ||||
|   makeFlags = [ "PREFIX=$(out)" ]; | ||||
|  | ||||
|   postFixup = '' | ||||
|     substituteInPlace $out/share/applications/samrewritten.desktop \ | ||||
|       --replace /usr/bin/samrewritten $out/bin/samrewritten | ||||
|   ''; | ||||
|  | ||||
|   meta = with stdenv.lib; { | ||||
|     description = "Steam Achievement Manager For Linux"; | ||||
|     homepage = "https://github.com/PaulCombal/SamRewritten"; | ||||
|     license = licenses.gpl3; | ||||
|     platforms = platforms.linux; | ||||
|   }; | ||||
| } | ||||
| @@ -1,61 +1,10 @@ | ||||
| { 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 (pkgs) lib newScope stdenv fetchzip; | ||||
|       inherit variant; | ||||
|     }; | ||||
|  | ||||
| @@ -72,98 +21,13 @@ rec { | ||||
|     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 { }; | ||||
| } | ||||
|   | ||||
							
								
								
									
										56
									
								
								pkgs/top-level/by-name-overlay.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								pkgs/top-level/by-name-overlay.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| # This file turns the pkgs/by-name directory (see its README.md for more info) | ||||
| # into an overlay that adds all the defined packages. | ||||
| # | ||||
| # No validity checks are done here, instead this file is optimised for | ||||
| # performance, and validity checks are done by CI on PRs. | ||||
| # | ||||
| # This file is based on Nixpkgs' `pkgs/top-level/by-name-overlay.nix` in order | ||||
| # to utilise the same infrastructure and layout, with some adjustments to fit | ||||
| # our derivative project. | ||||
|  | ||||
| { lib | ||||
| , pkgs | ||||
| }: | ||||
|  | ||||
| # Type: Path -> Overlay | ||||
| baseDirectory: | ||||
| let | ||||
|   inherit (builtins) | ||||
|     readDir | ||||
|     ; | ||||
|  | ||||
|   inherit (lib.attrsets) | ||||
|     mapAttrs | ||||
|     mapAttrsToList | ||||
|     mergeAttrsList | ||||
|     ; | ||||
|  | ||||
|   # Package files for a single shard | ||||
|   # Type: String -> String -> AttrsOf Path | ||||
|   namesForShard = shard: type: | ||||
|     if type != "directory" then | ||||
|     # Ignore all non-directories. Technically only README.md is allowed as a file in the base directory, so we could alternatively: | ||||
|     # - Assume that README.md is the only file and change the condition to `shard == "README.md"` for a minor performance improvement. | ||||
|     #   This would however cause very poor error messages if there's other files. | ||||
|     # - Ensure that README.md is the only file, throwing a better error message if that's not the case. | ||||
|     #   However this would make for a poor code architecture, because one type of error would have to be duplicated in the validity checks and here. | ||||
|     # Additionally in either of those alternatives, we would have to duplicate the hardcoding of "README.md" | ||||
|       { } | ||||
|     else | ||||
|       mapAttrs | ||||
|         (name: _: baseDirectory + "/${shard}/${name}/package.nix") | ||||
|         (readDir (baseDirectory + "/${shard}")); | ||||
|  | ||||
|   # The attribute set mapping names to the package files defining them | ||||
|   # This is defined up here in order to allow reuse of the value (it's kind of expensive to compute) | ||||
|   # if the overlay has to be applied multiple times | ||||
|   packageFiles = mergeAttrsList (mapAttrsToList namesForShard (readDir baseDirectory)); | ||||
| in | ||||
| # TODO: Consider optimising this using `builtins.deepSeq packageFiles`, | ||||
|   # which could free up the above thunks and reduce GC times. | ||||
|   # Currently this would be hard to measure until we have more packages | ||||
|   # and ideally https://github.com/NixOS/nix/pull/8895 | ||||
| _self: _super: | ||||
| mapAttrs | ||||
|   (_name: file: pkgs.callPackage file { }) | ||||
|   packageFiles | ||||
							
								
								
									
										19
									
								
								pkgs/top-level/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								pkgs/top-level/default.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| # Composes the packages collection. | ||||
|  | ||||
| { | ||||
|   # The system packages will be build and used on. | ||||
|   localSystem | ||||
|   # Nixpkgs | ||||
| , pkgs | ||||
|   # Nixpkgs lib | ||||
| , lib ? pkgs.lib | ||||
| }: | ||||
| let | ||||
|   allPackages = import ./stage.nix { | ||||
|     inherit lib pkgs; | ||||
|   }; | ||||
|  | ||||
|   available = lib.filterAttrs | ||||
|     (_: drv: builtins.elem localSystem (drv.meta.platforms or [ ])); | ||||
| in | ||||
| available allPackages | ||||
| @@ -2,28 +2,34 @@ | ||||
| , newScope | ||||
| , stdenv | ||||
| , fetchzip | ||||
| , makeWrapper | ||||
| , runCommand | ||||
|  | ||||
| , variant | ||||
| }: | ||||
|  | ||||
| let | ||||
|  | ||||
|   mkJetbrainsPlugins = import ../applications/editors/jetbrains/common-plugins.nix { | ||||
|     inherit lib stdenv fetchzip; | ||||
|   }; | ||||
|  | ||||
|   mkIdeaPlugins = import ../applications/editors/jetbrains/idea-plugins.nix { | ||||
|     inherit lib stdenv fetchzip; | ||||
|   }; | ||||
|  | ||||
|   jetbrainsWithPlugins = import ../applications/editors/jetbrains/wrapper.nix { | ||||
|     inherit lib makeWrapper runCommand; | ||||
|     inherit lib; | ||||
|   }; | ||||
|  | ||||
| in lib.makeScope newScope (self: lib.makeOverridable ({ | ||||
|   ideaPlugins ? mkIdeaPlugins self | ||||
| }: ({ } | ||||
| in | ||||
| lib.makeScope newScope (self: lib.makeOverridable | ||||
|   ({ jetbrainsPlugins ? mkJetbrainsPlugins self | ||||
|    , ideaPlugins ? mkIdeaPlugins self | ||||
|    }: ({ } | ||||
|     // jetbrainsPlugins // { inherit jetbrainsPlugins; } | ||||
|     // ideaPlugins // { inherit ideaPlugins; } | ||||
|     // { | ||||
|     inherit variant; | ||||
|     jetbrainsWithPlugins = jetbrainsWithPlugins self variant; | ||||
|   }) | ||||
| ) { }) | ||||
|   ) | ||||
| { }) | ||||
|   | ||||
							
								
								
									
										24
									
								
								pkgs/top-level/stage.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								pkgs/top-level/stage.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| # Composes a single bootstrapping of the package collection. The result is a set | ||||
| # of all the packages for some particular platform. | ||||
|  | ||||
| { lib | ||||
| , pkgs | ||||
| }: | ||||
| let | ||||
|  | ||||
|   # An overlay to auto-call packages in .../by-name. | ||||
|   autoCalledPackages = | ||||
|     import ./by-name-overlay.nix { inherit pkgs lib; } ../by-name; | ||||
|  | ||||
|   allPackages = _self: _super: | ||||
|     import ./all-packages.nix { inherit pkgs; }; | ||||
|  | ||||
|   toFix = (lib.flip lib.composeManyExtensions) (_self: { }) [ | ||||
|     autoCalledPackages | ||||
|     allPackages | ||||
|   ]; | ||||
|  | ||||
| in | ||||
|  | ||||
| # Return the complete set of packages. | ||||
| lib.fix toFix | ||||
		Reference in New Issue
	
	Block a user