mirror of
https://github.com/wahyd4/golink.git
synced 2026-08-09 05:05:56 +10:00
We have fixed the issue in the corp repo that required us to use pseudo-versions for the tailscale.com module here. So we can now switch to the latest stable version. Signed-off-by: Will Norris <will@tailscale.com>
164 lines
4.4 KiB
Nix
164 lines
4.4 KiB
Nix
{
|
|
description = "golink - A private shortlink service for tailnets";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "nixpkgs/nixpkgs-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
};
|
|
|
|
outputs =
|
|
{ self
|
|
, nixpkgs
|
|
, flake-utils
|
|
, ...
|
|
}:
|
|
let
|
|
golinkVersion =
|
|
if (self ? shortRev)
|
|
then self.shortRev
|
|
else "dev";
|
|
in
|
|
{
|
|
overlay = final: prev:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${prev.system};
|
|
in
|
|
rec {
|
|
golink = pkgs.buildGo122Module rec {
|
|
pname = "golink";
|
|
version = golinkVersion;
|
|
src = pkgs.nix-gitignore.gitignoreSource [ ] ./.;
|
|
|
|
vendorHash = "sha256-PWeQNlIMvhGAFDVwN8fp0B11Loi6zbm1Pds/CKLeuvA="; # SHA based on vendoring go.mod
|
|
};
|
|
};
|
|
}
|
|
// flake-utils.lib.eachDefaultSystem
|
|
(system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
overlays = [ self.overlay ];
|
|
inherit system;
|
|
};
|
|
in
|
|
rec {
|
|
# `nix develop`
|
|
devShell = pkgs.mkShell { buildInputs = [ pkgs.go_1_21 ]; };
|
|
|
|
# `nix build`
|
|
packages = with pkgs; {
|
|
inherit golink;
|
|
};
|
|
|
|
defaultPackage = pkgs.golink;
|
|
|
|
# `nix run`
|
|
apps.golink = flake-utils.lib.mkApp {
|
|
drv = packages.golink;
|
|
};
|
|
defaultApp = apps.golink;
|
|
|
|
overlays.default = self.overlay;
|
|
})
|
|
// {
|
|
nixosModules.default =
|
|
{ pkgs
|
|
, lib
|
|
, config
|
|
, ...
|
|
}:
|
|
let
|
|
cfg = config.services.golink;
|
|
in
|
|
{
|
|
options = with lib; {
|
|
services.golink = {
|
|
enable = mkEnableOption "Enable golink";
|
|
|
|
package = mkOption {
|
|
type = types.package;
|
|
description = ''
|
|
golink package to use
|
|
'';
|
|
default = pkgs.golink;
|
|
};
|
|
|
|
dataDir = mkOption {
|
|
type = types.path;
|
|
default = "/var/lib/golink";
|
|
description = "Path to data dir";
|
|
};
|
|
|
|
user = mkOption {
|
|
type = types.str;
|
|
default = "golink";
|
|
description = "User account under which golink runs.";
|
|
};
|
|
|
|
group = mkOption {
|
|
type = types.str;
|
|
default = "golink";
|
|
description = "Group account under which golink runs.";
|
|
};
|
|
|
|
databaseFile = mkOption {
|
|
type = types.path;
|
|
default = "/var/lib/golink/golink.db";
|
|
description = "Path to SQLite database";
|
|
};
|
|
|
|
tailscaleAuthKeyFile = mkOption {
|
|
type = types.path;
|
|
description = "Path to file containing the Tailscale Auth Key";
|
|
};
|
|
|
|
verbose = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
};
|
|
};
|
|
};
|
|
config = lib.mkIf cfg.enable {
|
|
users.users."${cfg.user}" = {
|
|
home = cfg.dataDir;
|
|
createHome = true;
|
|
group = "${cfg.group}";
|
|
isSystemUser = true;
|
|
isNormalUser = false;
|
|
description = "user for golink service";
|
|
};
|
|
users.groups."${cfg.group}" = { };
|
|
|
|
systemd.services.golink = {
|
|
enable = true;
|
|
script =
|
|
let
|
|
args =
|
|
[
|
|
"--sqlitedb ${cfg.databaseFile}"
|
|
]
|
|
++ lib.optionals cfg.verbose [ "--verbose" ];
|
|
in
|
|
''
|
|
${lib.optionalString (cfg.tailscaleAuthKeyFile != null) ''
|
|
export TS_AUTHKEY="$(head -n1 ${lib.escapeShellArg cfg.tailscaleAuthKeyFile})"
|
|
''}
|
|
|
|
${cfg.package}/bin/golink ${builtins.concatStringsSep " " args}
|
|
'';
|
|
wantedBy = [ "multi-user.target" ];
|
|
wants = [ "network-online.target" ];
|
|
after = [ "network-online.target" ];
|
|
serviceConfig = {
|
|
User = cfg.user;
|
|
Group = cfg.group;
|
|
Restart = "always";
|
|
RestartSec = "15";
|
|
WorkingDirectory = "${cfg.dataDir}";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|