Skip to content

Commit 96ec055

Browse files
lukaswrzJohnRTitor
authored andcommitted
nixos/filebrowser: init module
1 parent 3295729 commit 96ec055

File tree

6 files changed

+173
-0
lines changed

6 files changed

+173
-0
lines changed

nixos/doc/manual/release-notes/rl-2511.section.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212

1313
- [gtklock](https://github.com/jovanlanik/gtklock), a GTK-based lockscreen for Wayland. Available as [programs.gtklock](#opt-programs.gtklock.enable).
1414

15+
- [FileBrowser](https://filebrowser.org/), a web application for managing and sharing files. Available as [services.filebrowser](#opt-services.filebrowser.enable).
16+
1517
- [SuiteNumérique Docs](https://github.com/suitenumerique/docs), a collaborative note taking, wiki and documentation web platform and alternative to Notion or Outline. Available as [services.lasuite-docs](#opt-services.lasuite-docs.enable).
1618

1719
## Backward Incompatibilities {#sec-release-25.11-incompatibilities}

nixos/modules/module-list.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1536,6 +1536,7 @@
15361536
./services/web-apps/engelsystem.nix
15371537
./services/web-apps/ethercalc.nix
15381538
./services/web-apps/fider.nix
1539+
./services/web-apps/filebrowser.nix
15391540
./services/web-apps/filesender.nix
15401541
./services/web-apps/firefly-iii-data-importer.nix
15411542
./services/web-apps/firefly-iii.nix
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
{
2+
config,
3+
pkgs,
4+
lib,
5+
utils,
6+
...
7+
}:
8+
let
9+
cfg = config.services.filebrowser;
10+
inherit (lib) types;
11+
format = pkgs.formats.json { };
12+
in
13+
{
14+
options = {
15+
services.filebrowser = {
16+
enable = lib.mkEnableOption "FileBrowser";
17+
18+
package = lib.mkPackageOption pkgs "filebrowser" { };
19+
20+
openFirewall = lib.mkEnableOption "opening firewall ports for FileBrowser";
21+
22+
settings = lib.mkOption {
23+
default = { };
24+
description = ''
25+
Settings for FileBrowser.
26+
Refer to <https://filebrowser.org/cli/filebrowser#options> for all supported values.
27+
'';
28+
type = types.submodule {
29+
freeformType = format.type;
30+
31+
options = {
32+
address = lib.mkOption {
33+
default = "localhost";
34+
description = ''
35+
The address to listen on.
36+
'';
37+
type = types.str;
38+
};
39+
40+
port = lib.mkOption {
41+
default = 8080;
42+
description = ''
43+
The port to listen on.
44+
'';
45+
type = types.port;
46+
};
47+
48+
root = lib.mkOption {
49+
default = "/var/lib/filebrowser/data";
50+
description = ''
51+
The directory where FileBrowser stores files.
52+
'';
53+
type = types.path;
54+
};
55+
56+
database = lib.mkOption {
57+
default = "/var/lib/filebrowser/database.db";
58+
description = ''
59+
The path to FileBrowser's Bolt database.
60+
'';
61+
type = types.path;
62+
};
63+
64+
cache-dir = lib.mkOption {
65+
default = "/var/cache/filebrowser";
66+
description = ''
67+
The directory where FileBrowser stores its cache.
68+
'';
69+
type = types.path;
70+
readOnly = true;
71+
};
72+
};
73+
};
74+
};
75+
};
76+
};
77+
78+
config = lib.mkIf cfg.enable {
79+
systemd = {
80+
services.filebrowser = {
81+
after = [ "network.target" ];
82+
description = "FileBrowser";
83+
wantedBy = [ "multi-user.target" ];
84+
serviceConfig = {
85+
ExecStart =
86+
let
87+
args = [
88+
(lib.getExe cfg.package)
89+
"--config"
90+
(format.generate "config.json" cfg.settings)
91+
];
92+
in
93+
utils.escapeSystemdExecArgs args;
94+
95+
StateDirectory = "filebrowser";
96+
CacheDirectory = "filebrowser";
97+
WorkingDirectory = cfg.settings.root;
98+
99+
DynamicUser = true;
100+
101+
NoNewPrivileges = true;
102+
PrivateDevices = true;
103+
ProtectKernelTunables = true;
104+
ProtectKernelModules = true;
105+
ProtectControlGroups = true;
106+
MemoryDenyWriteExecute = true;
107+
LockPersonality = true;
108+
RestrictAddressFamilies = [
109+
"AF_UNIX"
110+
"AF_INET"
111+
"AF_INET6"
112+
];
113+
DevicePolicy = "closed";
114+
RestrictNamespaces = true;
115+
RestrictRealtime = true;
116+
RestrictSUIDSGID = true;
117+
};
118+
};
119+
120+
tmpfiles.settings.filebrowser =
121+
lib.genAttrs
122+
[
123+
cfg.settings.root
124+
(builtins.dirOf cfg.settings.database)
125+
]
126+
(_: {
127+
d.mode = "0700";
128+
});
129+
};
130+
131+
networking.firewall.allowedTCPPorts = lib.mkIf cfg.openFirewall [ cfg.settings.port ];
132+
};
133+
134+
meta.maintainers = [
135+
lib.maintainers.lukaswrz
136+
];
137+
}

nixos/tests/all-tests.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,7 @@ in
466466
ferretdb = handleTest ./ferretdb.nix { };
467467
fider = runTest ./fider.nix;
468468
filesender = runTest ./filesender.nix;
469+
filebrowser = runTest ./filebrowser.nix;
469470
filesystems-overlayfs = runTest ./filesystems-overlayfs.nix;
470471
firefly-iii = runTest ./firefly-iii.nix;
471472
firefly-iii-data-importer = runTest ./firefly-iii-data-importer.nix;

nixos/tests/filebrowser.nix

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
name = "filebrowser";
3+
4+
nodes.machine = {
5+
services.filebrowser = {
6+
enable = true;
7+
settings = {
8+
address = "localhost";
9+
port = 8080;
10+
database = "/var/lib/filebrowser/filebrowser.db";
11+
};
12+
};
13+
};
14+
15+
testScript = ''
16+
machine.start()
17+
18+
machine.wait_for_unit("filebrowser.service")
19+
machine.wait_for_open_port(8080)
20+
21+
machine.succeed("curl --fail http://localhost:8080/")
22+
23+
machine.succeed("stat /var/lib/filebrowser/filebrowser.db")
24+
25+
machine.shutdown()
26+
'';
27+
}

pkgs/by-name/fi/filebrowser/package.nix

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
nodejs_22,
88
pnpm_9,
9+
10+
nixosTests,
911
}:
1012

1113
let
@@ -70,6 +72,9 @@ buildGo123Module {
7072

7173
passthru = {
7274
inherit frontend;
75+
tests = {
76+
inherit (nixosTests) filebrowser;
77+
};
7378
};
7479

7580
meta = with lib; {

0 commit comments

Comments
 (0)