Skip to content

Commit 78dbadf

Browse files
authored
Merge branch 'main' into go-mine
2 parents 77bd49f + 9b756d5 commit 78dbadf

File tree

6 files changed

+288
-260
lines changed

6 files changed

+288
-260
lines changed

flake.lock

+36-23
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

+126-142
Original file line numberDiff line numberDiff line change
@@ -3,159 +3,143 @@
33

44
inputs = {
55
nixpkgs.url = "nixpkgs/nixpkgs-unstable";
6-
flake-utils.url = "github:numtide/flake-utils";
6+
parts.url = "github:hercules-ci/flake-parts";
7+
systems.url = "github:nix-systems/default";
78
};
89

9-
outputs =
10-
{ self
11-
, nixpkgs
12-
, flake-utils
13-
, ...
14-
}:
15-
let
16-
golinkVersion =
17-
if (self ? shortRev)
18-
then self.shortRev
19-
else "dev";
20-
in
21-
{
22-
overlay = final: prev:
23-
let
24-
pkgs = nixpkgs.legacyPackages.${prev.system};
25-
in
26-
rec {
27-
golink = pkgs.buildGo122Module rec {
28-
pname = "golink";
29-
version = golinkVersion;
30-
src = pkgs.nix-gitignore.gitignoreSource [ ] ./.;
31-
32-
vendorHash = "sha256-QkmdnOk+65VU0TISqX2nbBvJK7yw74nXaLk3snoira4="; # SHA based on vendoring go.mod
33-
};
10+
outputs = inputs @ { self, parts, ... }: parts.lib.mkFlake { inherit inputs; } {
11+
systems = import inputs.systems;
12+
13+
perSystem = { pkgs, ... }: {
14+
formatter = pkgs.nixpkgs-fmt;
15+
16+
devShells.default = pkgs.mkShell { buildInputs = [ pkgs.go_1_23 ]; };
17+
18+
packages.default =
19+
pkgs.buildGo123Module {
20+
pname = "golink";
21+
version =
22+
if (self ? shortRev)
23+
then self.shortRev
24+
else "dev";
25+
src = pkgs.nix-gitignore.gitignoreSource [ ] ./.;
26+
ldflags =
27+
let
28+
tsVersion = with builtins; head (match
29+
".*tailscale.com v([0-9]+\.[0-9]+\.[0-9]+-?[a-zA-Z]?).*"
30+
(readFile ./go.mod));
31+
in
32+
[
33+
"-w"
34+
"-s"
35+
"-X tailscale.com/version.longStamp=${tsVersion}"
36+
"-X tailscale.com/version.shortStamp=${tsVersion}"
37+
];
38+
vendorHash = "sha256-+XUg5XRswC77U5sZgQENQI2JGH0dwWdtsI4/NMI3KwA="; # SHA based on vendoring go.mod
3439
};
35-
}
36-
// flake-utils.lib.eachDefaultSystem
37-
(system:
40+
};
41+
42+
flake.overlays.default = final: prev: {
43+
golink = self.packages.${prev.system}.default;
44+
};
45+
46+
flake.nixosModules.default = { config, lib, pkgs, ... }:
3847
let
39-
pkgs = import nixpkgs {
40-
overlays = [ self.overlay ];
41-
inherit system;
42-
};
48+
cfg = config.services.golink;
49+
inherit (lib)
50+
concatStringsSep
51+
escapeShellArg
52+
mkEnableOption
53+
mkIf
54+
mkOption
55+
optionalString
56+
optionals
57+
types
58+
;
4359
in
44-
rec {
45-
# `nix develop`
46-
devShell = pkgs.mkShell { buildInputs = [ pkgs.go_1_21 ]; };
60+
{
61+
options.services.golink = {
62+
enable = mkEnableOption "Enable golink";
63+
64+
package = mkOption {
65+
type = types.package;
66+
description = ''
67+
golink package to use
68+
'';
69+
default = pkgs.golink;
70+
};
4771

48-
# `nix build`
49-
packages = with pkgs; {
50-
inherit golink;
51-
};
72+
dataDir = mkOption {
73+
type = types.path;
74+
default = "/var/lib/golink";
75+
description = "Path to data dir";
76+
};
5277

53-
defaultPackage = pkgs.golink;
78+
user = mkOption {
79+
type = types.str;
80+
default = "golink";
81+
description = "User account under which golink runs.";
82+
};
83+
84+
group = mkOption {
85+
type = types.str;
86+
default = "golink";
87+
description = "Group account under which golink runs.";
88+
};
5489

55-
# `nix run`
56-
apps.golink = flake-utils.lib.mkApp {
57-
drv = packages.golink;
90+
databaseFile = mkOption {
91+
type = types.path;
92+
default = "/var/lib/golink/golink.db";
93+
description = "Path to SQLite database";
94+
};
95+
96+
tailscaleAuthKeyFile = mkOption {
97+
type = types.path;
98+
description = "Path to file containing the Tailscale Auth Key";
99+
};
100+
101+
verbose = mkOption {
102+
type = types.bool;
103+
default = false;
104+
};
58105
};
59-
defaultApp = apps.golink;
60-
61-
overlays.default = self.overlay;
62-
})
63-
// {
64-
nixosModules.default =
65-
{ pkgs
66-
, lib
67-
, config
68-
, ...
69-
}:
70-
let
71-
cfg = config.services.golink;
72-
in
73-
{
74-
options = with lib; {
75-
services.golink = {
76-
enable = mkEnableOption "Enable golink";
77-
78-
package = mkOption {
79-
type = types.package;
80-
description = ''
81-
golink package to use
82-
'';
83-
default = pkgs.golink;
84-
};
85-
86-
dataDir = mkOption {
87-
type = types.path;
88-
default = "/var/lib/golink";
89-
description = "Path to data dir";
90-
};
91-
92-
user = mkOption {
93-
type = types.str;
94-
default = "golink";
95-
description = "User account under which golink runs.";
96-
};
97-
98-
group = mkOption {
99-
type = types.str;
100-
default = "golink";
101-
description = "Group account under which golink runs.";
102-
};
103-
104-
databaseFile = mkOption {
105-
type = types.path;
106-
default = "/var/lib/golink/golink.db";
107-
description = "Path to SQLite database";
108-
};
109-
110-
tailscaleAuthKeyFile = mkOption {
111-
type = types.path;
112-
description = "Path to file containing the Tailscale Auth Key";
113-
};
114-
115-
verbose = mkOption {
116-
type = types.bool;
117-
default = false;
118-
};
119-
};
106+
107+
config = mkIf cfg.enable {
108+
nixpkgs.overlays = [ self.overlays.default ];
109+
110+
users.groups."${cfg.group}" = { };
111+
users.users."${cfg.user}" = {
112+
home = cfg.dataDir;
113+
createHome = true;
114+
group = "${cfg.group}";
115+
isSystemUser = true;
116+
isNormalUser = false;
117+
description = "user for golink service";
120118
};
121-
config = lib.mkIf cfg.enable {
122-
users.users."${cfg.user}" = {
123-
home = cfg.dataDir;
124-
createHome = true;
125-
group = "${cfg.group}";
126-
isSystemUser = true;
127-
isNormalUser = false;
128-
description = "user for golink service";
129-
};
130-
users.groups."${cfg.group}" = { };
131-
132-
systemd.services.golink = {
133-
enable = true;
134-
script =
135-
let
136-
args =
137-
[
138-
"--sqlitedb ${cfg.databaseFile}"
139-
]
140-
++ lib.optionals cfg.verbose [ "--verbose" ];
141-
in
142-
''
143-
${lib.optionalString (cfg.tailscaleAuthKeyFile != null) ''
144-
export TS_AUTHKEY="$(head -n1 ${lib.escapeShellArg cfg.tailscaleAuthKeyFile})"
145-
''}
146-
147-
${cfg.package}/bin/golink ${builtins.concatStringsSep " " args}
148-
'';
149-
wantedBy = [ "multi-user.target" ];
150-
serviceConfig = {
151-
User = cfg.user;
152-
Group = cfg.group;
153-
Restart = "always";
154-
RestartSec = "15";
155-
WorkingDirectory = "${cfg.dataDir}";
156-
};
119+
120+
systemd.services.golink = {
121+
enable = true;
122+
script =
123+
let
124+
args = [ "--sqlitedb ${cfg.databaseFile}" ] ++ optionals cfg.verbose [ "--verbose" ];
125+
in
126+
''
127+
${optionalString (cfg.tailscaleAuthKeyFile != null) ''
128+
export TS_AUTHKEY="$(head -n1 ${escapeShellArg cfg.tailscaleAuthKeyFile})"
129+
''}
130+
131+
${cfg.package}/bin/golink ${concatStringsSep " " args}
132+
'';
133+
wantedBy = [ "multi-user.target" ];
134+
serviceConfig = {
135+
User = cfg.user;
136+
Group = cfg.group;
137+
Restart = "always";
138+
RestartSec = "15";
139+
WorkingDirectory = "${cfg.dataDir}";
157140
};
158141
};
159142
};
160-
};
143+
};
144+
};
161145
}

0 commit comments

Comments
 (0)