+17
.editorconfig
+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
.gitattributes
···
1
+
flake.lock -diff
+1
.github/CODEOWNERS
+1
.github/CODEOWNERS
···
1
+
* @isabelroses
+12
.github/dependabot.yml
+12
.github/dependabot.yml
+46
.github/workflows/build.yml
+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
+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
+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
+7
.gitignore
+21
LICENSE
+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
+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
+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
+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
modules/darwin/default.nix
···
1
+
builtins.throw "There is no default module yet"
+1
modules/home-manager/default.nix
+1
modules/home-manager/default.nix
···
1
+
builtins.throw "There is no default module yet"
+1
modules/nixos/default.nix
+1
modules/nixos/default.nix
···
1
+
{ imports = [ ./wakapi.nix ]; }
+250
modules/nixos/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
+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
+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
+11
pkgs/bellado/package.nix
pkgs/emojis/emojis.zip
pkgs/emojis/emojis.zip
This is a binary file and will not be displayed.
+26
pkgs/emojis/package.nix
+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
+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
+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
+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
+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
+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
+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
+
}