http://pkgs.tgirl.cloud/

feat: init

+17
.editorconfig
··· 1 + root = true 2 + 3 + [*] 4 + charset = utf-8 5 + end_of_line = lf 6 + indent_style = space 7 + indent_size = 2 8 + insert_final_newline = true 9 + tab_width = 4 10 + trim_trailing_whitespace = false 11 + 12 + [*.{diff,patch,lock}] 13 + indent_size = unset 14 + indent_size = unset 15 + end_of_line = unset 16 + insert_final_newline = unset 17 + trim_trailing_whitespace = unset
+1
.gitattributes
··· 1 + flake.lock -diff
+1
.github/CODEOWNERS
··· 1 + * @isabelroses
+12
.github/dependabot.yml
··· 1 + version: 2 2 + updates: 3 + - package-ecosystem: github-actions 4 + directory: "/" 5 + schedule: 6 + interval: weekly 7 + time: "03:00" 8 + labels: 9 + - "dependencies" 10 + commit-message: 11 + prefix: "chore" 12 + include: "scope"
+46
.github/workflows/build.yml
··· 1 + name: Build and populate cache 2 + 3 + on: 4 + workflow_dispatch: 5 + push: 6 + paths: 7 + - "flake/pkgs" 8 + - "**.lock" 9 + - "npins/*" 10 + schedule: 11 + - cron: "0 1 * * *" 12 + 13 + jobs: 14 + build: 15 + if: github.repository == 'isabelroses/beapkgs' 16 + runs-on: ubuntu-latest 17 + strategy: 18 + matrix: 19 + package: 20 + - bellado 21 + - izrss 22 + - zzz 23 + - gh-eco 24 + - isabelroses-website 25 + 26 + steps: 27 + - name: Checkout 28 + uses: actions/checkout@v4 29 + 30 + - name: Install Nix 31 + uses: DeterminateSystems/nix-installer-action@main 32 + with: 33 + logger: pretty 34 + 35 + - name: Nix Magic Cache 36 + uses: DeterminateSystems/magic-nix-cache-action@main 37 + 38 + - name: Setup cachix 39 + uses: cachix/cachix-action@v14 40 + with: 41 + name: isabelroses 42 + signingKey: "${{ secrets.CACHIX_SIGNING_KEY }}" 43 + authToken: "${{ secrets.CACHIX_TOKEN }}" 44 + 45 + - name: Build from the matrix 46 + run: nix build -Lv .#${{ matrix.package }}
+25
.github/workflows/check.yml
··· 1 + name: Validate Nix Flake 2 + 3 + on: 4 + workflow_dispatch: 5 + push: 6 + paths: 7 + - "**.nix" 8 + - "**.lock" 9 + - ".github/workflows/check.yml" 10 + 11 + jobs: 12 + check-flake: 13 + runs-on: ubuntu-latest 14 + 15 + steps: 16 + - name: Checkout 17 + uses: actions/checkout@v4 18 + 19 + - name: Install Nix 20 + uses: DeterminateSystems/nix-installer-action@main 21 + with: 22 + logger: pretty 23 + 24 + - name: Check Flake 25 + run: nix flake check --accept-flake-config
+37
.github/workflows/update.yml
··· 1 + name: Bump Flake Inputs 2 + 3 + on: 4 + workflow_dispatch: 5 + schedule: 6 + - cron: "0 0 * * *" 7 + 8 + jobs: 9 + update: 10 + if: github.repository == 'isabelroses/beapkgs' 11 + runs-on: ubuntu-latest 12 + 13 + permissions: 14 + contents: write 15 + 16 + steps: 17 + - name: Checkout 18 + uses: actions/checkout@v4 19 + 20 + - name: Install Nix 21 + uses: DeterminateSystems/nix-installer-action@main 22 + with: 23 + logger: pretty 24 + 25 + - name: Update Lockfile 26 + run: nix flake update 27 + 28 + - name: Update npins 29 + run: nix run nixpkgs#npins -- update 30 + 31 + - name: Commit and push 32 + uses: stefanzweifel/git-auto-commit-action@v5 33 + with: 34 + commit_message: "chore: update" 35 + push_options: "--force" 36 + commit_user_name: GitHub Actions 37 +
+7
.gitignore
··· 1 + # funny macos thing 2 + .DS_Store 3 + 4 + # Ignore nixos build outputs 5 + result 6 + result-* 7 + .direnv
+21
LICENSE
··· 1 + MIT License 2 + 3 + Copyright (c) 2024 isabelroses 4 + 5 + Permission is hereby granted, free of charge, to any person obtaining a copy 6 + of this software and associated documentation files (the "Software"), to deal 7 + in the Software without restriction, including without limitation the rights 8 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 + copies of the Software, and to permit persons to whom the Software is 10 + furnished to do so, subject to the following conditions: 11 + 12 + The above copyright notice and this permission notice shall be included in all 13 + copies or substantial portions of the Software. 14 + 15 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 + SOFTWARE.
+12
default.nix
··· 1 + (import ( 2 + let 3 + lock = builtins.fromJSON (builtins.readFile ./flake.lock); 4 + nodeName = lock.nodes.root.inputs.flake-compat; 5 + in 6 + fetchTarball { 7 + url = 8 + lock.nodes.${nodeName}.locked.url 9 + or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.${nodeName}.locked.rev}.tar.gz"; 10 + sha256 = lock.nodes.${nodeName}.locked.narHash; 11 + } 12 + ) { src = ./.; }).defaultNix
+44
flake.lock
··· 1 + { 2 + "nodes": { 3 + "flake-compat": { 4 + "flake": false, 5 + "locked": { 6 + "lastModified": 1696426674, 7 + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", 8 + "owner": "edolstra", 9 + "repo": "flake-compat", 10 + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", 11 + "type": "github" 12 + }, 13 + "original": { 14 + "owner": "edolstra", 15 + "repo": "flake-compat", 16 + "type": "github" 17 + } 18 + }, 19 + "nixpkgs": { 20 + "locked": { 21 + "lastModified": 1716137900, 22 + "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=", 23 + "owner": "nixos", 24 + "repo": "nixpkgs", 25 + "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1", 26 + "type": "github" 27 + }, 28 + "original": { 29 + "owner": "nixos", 30 + "ref": "nixos-unstable", 31 + "repo": "nixpkgs", 32 + "type": "github" 33 + } 34 + }, 35 + "root": { 36 + "inputs": { 37 + "flake-compat": "flake-compat", 38 + "nixpkgs": "nixpkgs" 39 + } 40 + } 41 + }, 42 + "root": "root", 43 + "version": 7 44 + }
+53
flake.nix
··· 1 + { 2 + inputs = { 3 + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; 4 + 5 + # this will be used at some point for the modules 6 + # home-manager = { 7 + # url = "github:nix-community/home-manager"; 8 + # inputs.nixpkgs.follows = "nixpkgs"; 9 + # }; 10 + 11 + flake-compat = { 12 + url = "github:edolstra/flake-compat"; 13 + flake = false; 14 + }; 15 + }; 16 + 17 + outputs = 18 + { nixpkgs, ... }: 19 + let 20 + forAllSystems = 21 + function: 22 + nixpkgs.lib.genAttrs [ 23 + "x86_64-linux" 24 + "aarch64-linux" 25 + "x86_64-darwin" 26 + "aarch64-darwin" 27 + ] (system: function nixpkgs.legacyPackages.${system}); 28 + in 29 + { 30 + devShells = forAllSystems (pkgs: { 31 + default = pkgs.callPackage ./shell.nix { }; 32 + }); 33 + 34 + formatter = forAllSystems (pkgs: pkgs.nixfmt-rfc-style); 35 + 36 + packages = forAllSystems ( 37 + pkgs: 38 + let 39 + inherit (nixpkgs) lib; 40 + in 41 + lib.packagesFromDirectoryRecursive { 42 + callPackage = lib.callPackageWith (pkgs // { pins = import ./npins; }); 43 + directory = ./pkgs; 44 + } 45 + ); 46 + 47 + # maybe we can sneek in [lib.mergeModules](https://noogle.dev/f/lib/mergeModules) here 48 + # but to do that I would like to make something like packagesFromDirectoryRecursive 49 + homeManagerModules.default = import ./modules/home-manager; 50 + nixosModules.default = import ./modules/nixos; 51 + darwinModules.default = import ./modules/darwin; 52 + }; 53 + }
+1
modules/darwin/default.nix
··· 1 + builtins.throw "There is no default module yet"
+1
modules/home-manager/default.nix
··· 1 + builtins.throw "There is no default module yet"
+1
modules/nixos/default.nix
··· 1 + { imports = [ ./wakapi.nix ]; }
+250
modules/nixos/wakapi.nix
··· 1 + { 2 + lib, 3 + pkgs, 4 + config, 5 + ... 6 + }: 7 + let 8 + # modified from https://git.winston.sh/winston/deployment-flake/src/branch/main/modules/wakapi.nix 9 + cfg = config.services.wakapi; 10 + user = config.users.users.wakapi.name; 11 + group = config.users.groups.wakapi.name; 12 + 13 + settingsFormat = pkgs.formats.yaml { }; 14 + inherit (lib) 15 + mkOption 16 + mkEnableOption 17 + mkPackageOption 18 + types 19 + mkIf 20 + optional 21 + mkMerge 22 + mkDefault 23 + singleton 24 + ; 25 + 26 + settingsFile = settingsFormat.generate "wakapi-settings" cfg.settings; 27 + 28 + userConfig = { 29 + users.users.wakapi = { 30 + inherit group; 31 + createHome = false; 32 + isSystemUser = true; 33 + }; 34 + users.groups.wakapi = { }; 35 + }; 36 + 37 + serviceConfig = { 38 + systemd.services.wakapi = { 39 + description = "Wakapi (self-hosted WakaTime-compatible backend)"; 40 + wants = [ "network-online.target" ]; 41 + after = [ "network-online.target" ]; 42 + wantedBy = [ "multi-user.target" ]; 43 + 44 + script = '' 45 + exec ${pkgs.wakapi}/bin/wakapi -config ${settingsFile} 46 + ''; 47 + 48 + serviceConfig = { 49 + Environment = mkMerge [ 50 + (mkIf (cfg.passwordSalt != null) "WAKAPI_PASSWORD_SALT=${cfg.passwordSalt}") 51 + (mkIf (cfg.smtpPassword != null) "WAKAPI_MAIL_SMTP_PASS=${cfg.smtpPassword}") 52 + ]; 53 + EnvironmentFile = [ 54 + (optional (cfg.passwordSaltFile != null) cfg.passwordSaltFile) 55 + (optional (cfg.smtpPasswordFile != null) cfg.smtpPasswordFile) 56 + ]; 57 + 58 + User = user; 59 + Group = group; 60 + 61 + DynamicUser = true; 62 + ProtectHome = true; 63 + ProtectHostname = true; 64 + ProtectKernelLogs = true; 65 + ProtectKernelModules = true; 66 + ProtectKernelTunables = true; 67 + ProtectProc = "invisible"; 68 + ProtectSystem = "strict"; 69 + RestrictAddressFamilies = [ 70 + "AF_INET" 71 + "AF_INET6" 72 + "AF_UNIX" 73 + ]; 74 + RestrictNamespaces = true; 75 + RestrictRealtime = true; 76 + RestrictSUIDSGID = true; 77 + StateDirectoryMode = "0700"; 78 + Restart = "always"; 79 + }; 80 + }; 81 + 82 + services.wakapi.settings = { 83 + env = lib.mkDefault "production"; 84 + inherit (cfg) db; 85 + server = { 86 + inherit (cfg) port; 87 + }; 88 + }; 89 + 90 + assertions = [ 91 + { 92 + assertion = cfg.passwordSalt != null || cfg.passwordSaltFile != null; 93 + message = "Either `services.wakapi.passwordSalt` or `services.wakapi.passwordSaltFile` must be set."; 94 + } 95 + { 96 + assertion = cfg.smtpPassword != null -> cfg.smtpPasswordFile != null; 97 + message = "Both `smtpPassword` or `smtpPasswordFile` should not be set at the same time."; 98 + } 99 + ]; 100 + }; 101 + 102 + databaseConfig = { 103 + services.postgresql = { 104 + enable = true; 105 + ensureDatabases = singleton cfg.settings.db.name; 106 + ensureUsers = singleton { 107 + name = cfg.settings.db.user; 108 + ensureDBOwnership = true; 109 + }; 110 + authentication = '' 111 + host ${cfg.settings.db.name} ${cfg.settings.db.user} 127.0.0.1/32 trust 112 + ''; 113 + }; 114 + 115 + services.wakapi.settings.db = { 116 + dialect = "postgres"; 117 + }; 118 + 119 + systemd.services.wakapi = { 120 + requires = [ "postgresql.service" ]; 121 + after = [ "postgresql.service" ]; 122 + }; 123 + }; 124 + 125 + nginxConfig = mkIf cfg.nginx.enable { 126 + services.nginx = { 127 + enable = true; 128 + virtualHosts.${cfg.domain} = { 129 + locations."/".proxyPass = "http://127.0.0.1:${toString cfg.port}"; 130 + 131 + enableACME = mkDefault true; 132 + forceSSL = mkDefault true; 133 + }; 134 + }; 135 + 136 + services.wakapi.settings.server = { 137 + public_url = mkDefault cfg.domain; 138 + }; 139 + }; 140 + in 141 + { 142 + options.services.wakapi = { 143 + enable = mkEnableOption "Wakapi"; 144 + package = mkPackageOption pkgs "wakapi" { }; 145 + 146 + port = mkOption { 147 + type = types.int; 148 + default = 3000; 149 + description = '' 150 + The port to serve Wakapi on. 151 + This is used to configure nginx. 152 + ''; 153 + }; 154 + domain = mkOption { 155 + type = types.nullOr types.str; 156 + default = null; 157 + description = '' 158 + The FQDN of the domain to serve Wakapi on. 159 + This is used to configure nginx. 160 + ''; 161 + }; 162 + 163 + db = { 164 + host = mkOption { 165 + type = types.str; 166 + default = "127.0.0.1"; 167 + description = '' 168 + The database host to use for Wakapi. 169 + ''; 170 + }; 171 + port = mkOption { 172 + type = types.int; 173 + default = 5432; 174 + description = '' 175 + The port to use for the database. 176 + ''; 177 + }; 178 + name = mkOption { 179 + type = types.str; 180 + default = "wakapi"; 181 + description = '' 182 + The database name to use for Wakapi. 183 + ''; 184 + }; 185 + user = mkOption { 186 + type = types.str; 187 + default = "wakapi"; 188 + description = '' 189 + The database user to use for Wakapi. 190 + ''; 191 + }; 192 + password = mkOption { 193 + type = types.nullOr types.str; 194 + default = null; 195 + description = '' 196 + The database password to use for Wakapi. 197 + ''; 198 + }; 199 + }; 200 + 201 + nginx.enable = mkEnableOption "Wakapi Nginx"; 202 + 203 + passwordSalt = mkOption { 204 + type = types.nullOr types.str; 205 + default = null; 206 + description = '' 207 + The password salt to use for Wakapi. 208 + ''; 209 + }; 210 + passwordSaltFile = mkOption { 211 + type = types.nullOr types.path; 212 + default = null; 213 + description = '' 214 + The path to a file containing the password salt to use for Wakapi. 215 + ''; 216 + }; 217 + 218 + smtpPassword = mkOption { 219 + type = types.nullOr types.str; 220 + default = null; 221 + description = '' 222 + The password used for the smtp mailed to used by Wakapi. 223 + ''; 224 + }; 225 + smtpPasswordFile = mkOption { 226 + type = types.nullOr types.path; 227 + default = null; 228 + description = '' 229 + The path to a file containing the password for the smtp mailer used by Wakapi. 230 + ''; 231 + }; 232 + 233 + settings = mkOption { 234 + inherit (settingsFormat) type; 235 + default = { }; 236 + description = '' 237 + Settings for Wakapi. 238 + 239 + See [config.default.yml](https://github.com/muety/wakapi/blob/master/config.default.yml) for a list of all possible options. 240 + ''; 241 + }; 242 + }; 243 + 244 + config = mkIf cfg.enable (mkMerge [ 245 + userConfig 246 + databaseConfig 247 + nginxConfig 248 + serviceConfig 249 + ]); 250 + }
+80
npins/default.nix
··· 1 + # Generated by npins. Do not modify; will be overwritten regularly 2 + let 3 + data = builtins.fromJSON (builtins.readFile ./sources.json); 4 + version = data.version; 5 + 6 + mkSource = 7 + spec: 8 + assert spec ? type; 9 + let 10 + path = 11 + if spec.type == "Git" then 12 + mkGitSource spec 13 + else if spec.type == "GitRelease" then 14 + mkGitSource spec 15 + else if spec.type == "PyPi" then 16 + mkPyPiSource spec 17 + else if spec.type == "Channel" then 18 + mkChannelSource spec 19 + else 20 + builtins.throw "Unknown source type ${spec.type}"; 21 + in 22 + spec // { outPath = path; }; 23 + 24 + mkGitSource = 25 + { 26 + repository, 27 + revision, 28 + url ? null, 29 + hash, 30 + branch ? null, 31 + ... 32 + }: 33 + assert repository ? type; 34 + # At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository 35 + # In the latter case, there we will always be an url to the tarball 36 + if url != null then 37 + (builtins.fetchTarball { 38 + inherit url; 39 + sha256 = hash; # FIXME: check nix version & use SRI hashes 40 + }) 41 + else 42 + assert repository.type == "Git"; 43 + let 44 + urlToName = 45 + url: rev: 46 + let 47 + matched = builtins.match "^.*/([^/]*)(\\.git)?$" repository.url; 48 + 49 + short = builtins.substring 0 7 rev; 50 + 51 + appendShort = if (builtins.match "[a-f0-9]*" rev) != null then "-${short}" else ""; 52 + in 53 + "${if matched == null then "source" else builtins.head matched}${appendShort}"; 54 + name = urlToName repository.url revision; 55 + in 56 + builtins.fetchGit { 57 + url = repository.url; 58 + rev = revision; 59 + inherit name; 60 + # hash = hash; 61 + }; 62 + 63 + mkPyPiSource = 64 + { url, hash, ... }: 65 + builtins.fetchurl { 66 + inherit url; 67 + sha256 = hash; 68 + }; 69 + 70 + mkChannelSource = 71 + { url, hash, ... }: 72 + builtins.fetchTarball { 73 + inherit url; 74 + sha256 = hash; 75 + }; 76 + in 77 + if version == 3 then 78 + builtins.mapAttrs (_: mkSource) data.pins 79 + else 80 + throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`"
+74
npins/sources.json
··· 1 + { 2 + "pins": { 3 + "bellado": { 4 + "type": "Git", 5 + "repository": { 6 + "type": "GitHub", 7 + "owner": "isabelroses", 8 + "repo": "bellado" 9 + }, 10 + "branch": "main", 11 + "revision": "8b9bb4e19b06a35acd8b2d39830c2751246ff189", 12 + "url": "https://github.com/isabelroses/bellado/archive/8b9bb4e19b06a35acd8b2d39830c2751246ff189.tar.gz", 13 + "hash": "1vk7g462x4q0hm6bxifjdr328595n1mkhhn79ibq9ql4zbbjiybs" 14 + }, 15 + "gh-eco": { 16 + "type": "Git", 17 + "repository": { 18 + "type": "GitHub", 19 + "owner": "isabelroses", 20 + "repo": "gh-eco" 21 + }, 22 + "branch": "chore/update-deps", 23 + "revision": "d45b1e7de8cbcb692def0e94111262cdeff2835d", 24 + "url": "https://github.com/isabelroses/gh-eco/archive/d45b1e7de8cbcb692def0e94111262cdeff2835d.tar.gz", 25 + "hash": "067cd79wli18zmm1chf1bvcrj7s1fwgr3incyqgaiy751k7kp06c" 26 + }, 27 + "izrss": { 28 + "type": "GitRelease", 29 + "repository": { 30 + "type": "GitHub", 31 + "owner": "isabelroses", 32 + "repo": "izrss" 33 + }, 34 + "pre_releases": false, 35 + "version_upper_bound": null, 36 + "release_prefix": null, 37 + "version": "v0.0.6", 38 + "revision": "0a059591ad2c10de84b834bca4e5d23f39cb8acb", 39 + "url": "https://api.github.com/repos/isabelroses/izrss/tarball/v0.0.6", 40 + "hash": "1mbzhaapra42vk8xqmfhrfzpd0lk727ma9yqriczrdjcs7gydvxl" 41 + }, 42 + "nixpkgs": { 43 + "type": "Channel", 44 + "name": "nixpkgs-unstable", 45 + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-24.05pre628952.641daa314d5b/nixexprs.tar.xz", 46 + "hash": "10vql3aqsckyjn9qaw39a17scsxiz3sj2918xdf2sjhsfvxyyfml" 47 + }, 48 + "website": { 49 + "type": "Git", 50 + "repository": { 51 + "type": "GitHub", 52 + "owner": "isabelroses", 53 + "repo": "website" 54 + }, 55 + "branch": "main", 56 + "revision": "c11fb794b326f55d41c56ac9540edbf817e159bc", 57 + "url": "https://github.com/isabelroses/website/archive/c11fb794b326f55d41c56ac9540edbf817e159bc.tar.gz", 58 + "hash": "0mvqn39vzbxfhfzjplzk3ichwc94in6sn9hnhg4bv9c9zdqsviq1" 59 + }, 60 + "zzz": { 61 + "type": "Git", 62 + "repository": { 63 + "type": "GitHub", 64 + "owner": "isabelroses", 65 + "repo": "zzz" 66 + }, 67 + "branch": "main", 68 + "revision": "7715a19520e8234820851d29bb83f44788a671c2", 69 + "url": "https://github.com/isabelroses/zzz/archive/7715a19520e8234820851d29bb83f44788a671c2.tar.gz", 70 + "hash": "110wjnsx7m0v4hj4a8k80dcmcv8z0f0na986gcz6l29wn1ihkjkj" 71 + } 72 + }, 73 + "version": 3 74 + }
+11
pkgs/bellado/package.nix
··· 1 + { pins, rustPlatform }: 2 + rustPlatform.buildRustPackage { 3 + pname = "bellado"; 4 + version = "0.3.0"; 5 + 6 + src = pins.bellado; 7 + 8 + cargoHash = "sha256-N3jH/bjionN6ulxKrzFip2Oyc+cgQEJovxE7UxsDTEA="; 9 + 10 + doCheck = false; 11 + }
pkgs/emojis/emojis.zip

This is a binary file and will not be displayed.

+26
pkgs/emojis/package.nix
··· 1 + { 2 + lib, 3 + unzip, 4 + stdenvNoCC, 5 + }: 6 + stdenvNoCC.mkDerivation { 7 + pname = "emojis"; 8 + version = "0.1.1"; 9 + 10 + src = builtins.filterSource (path: _: baseNameOf path != ".zip") ./.; 11 + 12 + nativeBuildInputs = [ unzip ]; 13 + 14 + installPhase = '' 15 + runHook preInstall 16 + mkdir -p $out 17 + unzip $src/emojis.zip 18 + cp * $out 19 + runHook postInstall 20 + ''; 21 + 22 + meta = { 23 + description = "emojis repacked as APNG"; 24 + license = lib.licenses.unfree; 25 + }; 26 + }
+29
pkgs/gh-eco/package.nix
··· 1 + { 2 + lib, 3 + pins, 4 + buildGoModule, 5 + }: 6 + let 7 + version = builtins.substring 0 7 pins.gh-eco.revision; 8 + in 9 + buildGoModule { 10 + pname = "gh-eco"; 11 + inherit version; 12 + 13 + src = pins.gh-eco; 14 + 15 + vendorHash = "sha256-O3FQ+Z3KVYgTafwVXUhrGRuOAWlWlOhtVegKVoZBnDE="; 16 + 17 + ldflags = [ 18 + "-s" 19 + "-w" 20 + "-X main.Version=${version}" 21 + ]; 22 + 23 + meta = { 24 + description = "a working fork of gh-eco"; 25 + homepage = "https://github.com/isabelroses/gh-eco"; 26 + license = lib.licenses.gpl3; 27 + platforms = lib.platforms.all; 28 + }; 29 + }
+39
pkgs/headscale-ui/package.nix
··· 1 + { 2 + lib, 3 + unzip, 4 + stdenv, 5 + fetchurl, 6 + }: 7 + let 8 + pname = "headscale-ui"; 9 + version = "2023.01.30-beta-1"; 10 + in 11 + stdenv.mkDerivation { 12 + inherit pname version; 13 + 14 + src = fetchurl { 15 + url = "https://github.com/gurucomputing/${pname}/releases/download/${version}/headscale-ui.zip"; 16 + sha256 = "sha256-6SUgtSTFvJWNdsWz6AiOfUM9p33+8EhDwyqHX7O2+NQ="; 17 + }; 18 + 19 + buildInputs = [ unzip ]; 20 + 21 + dontStrip = true; 22 + 23 + unpackPhase = '' 24 + runHook preUnpack 25 + unzip $src 26 + runHook postUnpack 27 + ''; 28 + 29 + installPhase = '' 30 + mkdir -p $out/share/ 31 + cp -r web/ $out/share/ 32 + ''; 33 + 34 + meta = { 35 + description = "A web frontend for the headscale Tailscale-compatible coordination server"; 36 + homepage = "https://github.com/gurucomputing/headscale-ui"; 37 + license = lib.licenses.bsd3; 38 + }; 39 + }
+42
pkgs/isabelroses-website/package.nix
··· 1 + { 2 + lib, 3 + pins, 4 + buildGoModule, 5 + }: 6 + let 7 + version = builtins.substring 0 7 pins.website.revision; 8 + in 9 + buildGoModule { 10 + pname = "isabelroses-website"; 11 + inherit version; 12 + 13 + src = pins.website; 14 + 15 + vendorHash = "sha256-rdAPPF8pqkK/JZSKC2XBmJDzgCh5PA5LJgrg9Z0ZAnU="; 16 + 17 + ldflags = [ 18 + "-s" 19 + "-w" 20 + ]; 21 + 22 + patchPhase = '' 23 + substituteInPlace lib/settings.go \ 24 + --replace-fail 'RootDir string = "."' 'RootDir string = "'$out/share'"' \ 25 + --replace-fail 'ServeDir string = "."' 'ServeDir string = "/srv/storage/isabelroses.com"' 26 + ''; 27 + 28 + postInstall = '' 29 + mkdir -p $out/share 30 + 31 + cp -r content $out/share/content 32 + cp -r public $out/share/public 33 + cp -r templates $out/share/templates 34 + ''; 35 + 36 + meta = { 37 + description = "isabelroses.com"; 38 + homepage = "https://isabelroses.com/"; 39 + license = lib.licenses.gpl3; 40 + mainProgram = "isabelroses.com"; 41 + }; 42 + }
+30
pkgs/izrss/package.nix
··· 1 + { 2 + lib, 3 + pins, 4 + buildGoModule, 5 + }: 6 + let 7 + inherit (pins.izrss) version; 8 + in 9 + buildGoModule { 10 + pname = "izrss"; 11 + inherit version; 12 + 13 + src = pins.izrss; 14 + 15 + vendorHash = "sha256-/gD82wT4jWNMQsGPb2nYQiFQsUdKICyO6eiRPHrLsy8="; 16 + 17 + ldflags = [ 18 + "-s" 19 + "-w" 20 + "-X main.version=${version}" 21 + ]; 22 + 23 + meta = { 24 + description = "A RSS feed reader for the terminal"; 25 + homepage = "https://github.com/isabelroses/izrss"; 26 + license = lib.licenses.gpl3Plus; 27 + maintainers = with lib.maintainers; [ isabelroses ]; 28 + mainPackage = "izrss"; 29 + }; 30 + }
+33
pkgs/plymouth-theme-catppuccin/package.nix
··· 1 + { 2 + lib, 3 + pkgs, 4 + stdenvNoCC, 5 + }: 6 + stdenvNoCC.mkDerivation { 7 + pname = "plymouth-theme-catppuccin"; 8 + version = "2022-12-10"; 9 + 10 + src = pkgs.fetchFromGitHub { 11 + owner = "catppuccin"; 12 + repo = "plymouth"; 13 + rev = "d4105cf336599653783c34c4a2d6ca8c93f9281c"; 14 + sha256 = "sha256-quBSH8hx3gD7y1JNWAKQdTk3CmO4t1kVo4cOGbeWlNE="; 15 + }; 16 + 17 + installPhase = '' 18 + mkdir -p "$out/share/plymouth/themes/" 19 + cp -r "themes/"* "$out/share/plymouth/themes/" 20 + 21 + themes=("mocha" "macchiato" "frappe" "latte") 22 + for dir in "''${themes[@]}"; do 23 + cat "themes/catppuccin-''${dir}/catppuccin-''${dir}.plymouth" | sed "s@\/usr\/@''${out}\/@" > "''${out}/share/plymouth/themes/catppuccin-''${dir}/catppuccin-''${dir}.plymouth" 24 + done 25 + ''; 26 + 27 + meta = { 28 + description = "Soothing pastel theme for Plymouth"; 29 + homepage = "https://github.com/catppuccin/plymouth"; 30 + license = lib.licenses.mit; 31 + platforms = lib.platforms.linux; 32 + }; 33 + }
+28
pkgs/zzz/package.nix
··· 1 + { 2 + lib, 3 + pins, 4 + buildGoModule, 5 + }: 6 + let 7 + version = builtins.substring 0 7 pins.zzz.revision; 8 + in 9 + buildGoModule { 10 + pname = "zzz"; 11 + inherit version; 12 + 13 + src = pins.zzz; 14 + 15 + vendorHash = "sha256-ePHkrsc9NJO8c3J1eDkFeSLvVs5flSeiTmXqkfF261s="; 16 + 17 + ldflags = [ 18 + "-s" 19 + "-w" 20 + ]; 21 + 22 + meta = { 23 + description = "Code snippets in your terminal 🛌"; 24 + mainProgram = "zzz"; 25 + homepage = "https://github.com/isabelroses/zzz"; 26 + license = lib.licenses.mit; 27 + }; 28 + }
+9
shell.nix
··· 1 + { 2 + pkgs ? import <nixpkgs> { }, 3 + }: 4 + pkgs.mkShellNoCC { 5 + packages = with pkgs; [ 6 + npins 7 + nixfmt-rfc-style 8 + ]; 9 + }