summaryrefslogtreecommitdiff
path: root/custom
diff options
context:
space:
mode:
Diffstat (limited to 'custom')
m---------custom/thermoprint0
-rw-r--r--custom/tinc/def.nix145
m---------custom/trivmix0
-rw-r--r--custom/trivmix-service.nix41
l---------custom/trivmix.nix1
-rw-r--r--custom/uucp.nix18
6 files changed, 105 insertions, 100 deletions
diff --git a/custom/thermoprint b/custom/thermoprint
Subproject e95dac748371afcad3ffddf5c98e5fcb0a8302b Subproject ba2e44af40746f339e1ed652ea233c739790556
diff --git a/custom/tinc/def.nix b/custom/tinc/def.nix
index 58c5237c..563335ad 100644
--- a/custom/tinc/def.nix
+++ b/custom/tinc/def.nix
@@ -6,6 +6,77 @@ let
6 6
7 cfg = config.services.customTinc; 7 cfg = config.services.customTinc;
8 8
9 networkModule = {
10 extraConfig = mkOption {
11 default = ''
12 PingTimeout = 10
13 '';
14 type = types.lines;
15 description = ''
16 Extra lines to add to the tinc service configuration file.
17 '';
18 };
19
20 name = mkOption {
21 default = null;
22 type = types.nullOr types.str;
23 description = ''
24 The name of the node which is used as an identifier when communicating
25 with the remote nodes in the mesh. If null then the hostname of the system
26 is used.
27 '';
28 };
29
30 debugLevel = mkOption {
31 default = 0;
32 type = types.addCheck types.int (l: l >= 0 && l <= 5);
33 description = ''
34 The amount of debugging information to add to the log. 0 means little
35 logging while 5 is the most logging. <command>man tincd</command> for
36 more details.
37 '';
38 };
39
40 hosts = mkOption {
41 default = { };
42 type = types.loaOf types.lines;
43 description = ''
44 The name of the host in the network as well as the configuration for that host.
45 This name should only contain alphanumerics and underscores.
46 '';
47 };
48
49 interfaceType = mkOption {
50 default = "tun";
51 type = types.addCheck types.str (n: n == "tun" || n == "tap");
52 description = ''
53 The type of virtual interface used for the network connection
54 '';
55 };
56
57 interfaceConfig = mkOption {
58 default = { };
59 description = ''
60 Additional configuration for the generated network interface
61 '';
62 };
63
64 package = mkOption {
65 default = pkgs.tinc_pre;
66 description = ''
67 The package to use for the tinc daemon's binary.
68 '';
69 };
70
71 scripts = mkOption {
72 default = { };
73 type = types.loaOf (types.nullOr types.str);
74 description = ''
75 Hook scripts
76 '';
77 };
78
79 };
9in 80in
10 81
11{ 82{
@@ -18,83 +89,11 @@ in
18 89
19 networks = mkOption { 90 networks = mkOption {
20 default = { }; 91 default = { };
21 type = types.loaOf types.optionSet; 92 type = types.loaOf (types.submodule { options = networkModule; });
22 description = '' 93 description = ''
23 Defines the tinc networks which will be started. 94 Defines the tinc networks which will be started.
24 Each network invokes a different daemon. 95 Each network invokes a different daemon.
25 ''; 96 '';
26 options = {
27
28 extraConfig = mkOption {
29 default = ''
30 PingTimeout = 10
31 '';
32 type = types.lines;
33 description = ''
34 Extra lines to add to the tinc service configuration file.
35 '';
36 };
37
38 name = mkOption {
39 default = null;
40 type = types.nullOr types.str;
41 description = ''
42 The name of the node which is used as an identifier when communicating
43 with the remote nodes in the mesh. If null then the hostname of the system
44 is used.
45 '';
46 };
47
48 debugLevel = mkOption {
49 default = 0;
50 type = types.addCheck types.int (l: l >= 0 && l <= 5);
51 description = ''
52 The amount of debugging information to add to the log. 0 means little
53 logging while 5 is the most logging. <command>man tincd</command> for
54 more details.
55 '';
56 };
57
58 hosts = mkOption {
59 default = { };
60 type = types.loaOf types.lines;
61 description = ''
62 The name of the host in the network as well as the configuration for that host.
63 This name should only contain alphanumerics and underscores.
64 '';
65 };
66
67 interfaceType = mkOption {
68 default = "tun";
69 type = types.addCheck types.str (n: n == "tun" || n == "tap");
70 description = ''
71 The type of virtual interface used for the network connection
72 '';
73 };
74
75 interfaceConfig = mkOption {
76 default = { };
77 description = ''
78 Additional configuration for the generated network interface
79 '';
80 };
81
82 package = mkOption {
83 default = pkgs.tinc_pre;
84 description = ''
85 The package to use for the tinc daemon's binary.
86 '';
87 };
88
89 scripts = mkOption {
90 default = { };
91 type = types.loaOf (types.nullOr types.str);
92 description = ''
93 Hook scripts
94 '';
95 };
96
97 };
98 }; 97 };
99 }; 98 };
100 99
diff --git a/custom/trivmix b/custom/trivmix
Subproject 72467d55a7b6e3afcafc2cd1527da10574cf636 Subproject 70e600346fb5875defe14d578883c9838695d53
diff --git a/custom/trivmix-service.nix b/custom/trivmix-service.nix
index 3c3cded7..e9120f88 100644
--- a/custom/trivmix-service.nix
+++ b/custom/trivmix-service.nix
@@ -3,43 +3,40 @@
3, connectOut ? null 3, connectOut ? null
4, connectIn ? null 4, connectIn ? null
5, group ? null 5, group ? null
6, initial ? null
6, trivmix 7, trivmix
7, stdenv 8, stdenv
8, makeWrapper 9, makeWrapper
9, jack2Full 10, jack2Full
10, coreutils 11, coreutils
12, writeScript
11}: 13}:
12 14
13let 15let
14 genRun = if ! isNull run then run else ( 16 connect = (! isNull connectOut) || (! isNull connectIn);
15 "${derivRun}/bin/run.sh" 17 connectScript = writeScript "connect" ''
16 ); 18 #!${stdenv.shell}
17 derivRun = stdenv.mkDerivation {
18 name = "trivmix-run";
19 src = builtins.toFile "run.sh" ''
20 #!/bin/sh
21 19
22 ${if ! isNull connectIn then "jack_connect ${connectIn} $1" else ""} 20 PATH=${jack2Full}/bin:$PATH
23 ${if ! isNull connectOut then "jack_connect $2 ${connectOut}" else ""} 21
24 ''; 22 ${optionalString (! isNull connectIn) "jack_connect ${connectIn} $1"}
25 unpackPhase = "cat"; 23 ${optionalString (! isNull connectOut) "jack_connect $2 ${connectOut}"}
26 buildInputs = [ makeWrapper ]; 24 '';
27 installPhase = '' 25 inherit (stdenv.lib) optionalString;
28 mkdir -p $out/bin 26in {
29 cp $src $out/bin/run.sh
30 chmod 755 $out/bin/run.sh
31 wrapProgram $out/bin/run.sh \
32 --prefix PATH : ${jack2Full}/bin
33 '';
34 };
35in rec {
36 out = { 27 out = {
37 wantedBy = [ "sound.target" ]; 28 wantedBy = [ "sound.target" ];
38 requires = [ "jack.service" ]; 29 requires = [ "jack.service" ];
39 before = [ "mpd.service" ]; 30 before = [ "mpd.service" ];
40 serviceConfig = { 31 serviceConfig = {
41 Type = "simple"; 32 Type = "simple";
42 ExecStart = ''${trivmix}/bin/trivmix --client ${name} --run ${genRun} /dev/shm/mix/${name}/level${if ! isNull group then " /dev/shm/mix/${group}/level" else ""}''; 33 ExecStart = ''${trivmix}/bin/trivmix --client ${name} \
34 ${optionalString connect "--run ${connectScript}"} \
35 ${optionalString (! isNull run) "--run ${run}"} \
36 ${optionalString (! isNull initial) "--level ${initial}"} \
37 /dev/shm/mix/${name}/level \
38 ${optionalString (! isNull group) "/dev/shm/mix/${group}/level"}
39 '';
43 User = "jack"; 40 User = "jack";
44 Group = "audio"; 41 Group = "audio";
45 Nice = "-10"; 42 Nice = "-10";
diff --git a/custom/trivmix.nix b/custom/trivmix.nix
deleted file mode 120000
index c2f64840..00000000
--- a/custom/trivmix.nix
+++ /dev/null
@@ -1 +0,0 @@
1trivmix/package.nix \ No newline at end of file
diff --git a/custom/uucp.nix b/custom/uucp.nix
index d7c2aae2..0b4b1306 100644
--- a/custom/uucp.nix
+++ b/custom/uucp.nix
@@ -208,7 +208,17 @@ in {
208 text = config.services.uucp.extraSys + "\n" + concatStringsSep "\n" (map sysSpec config.services.uucp.remoteNodes); 208 text = config.services.uucp.extraSys + "\n" + concatStringsSep "\n" (map sysSpec config.services.uucp.remoteNodes);
209 }; 209 };
210 210
211 security.setuidOwners = map (p: {program = p; owner = "root"; group = "root"; setuid = true; setgid = false;}) ["uucico" "uuxqt" "cu" "uucp" "uuname" "uustat" "uux"]; 211 security.wrappers = let
212 wrapper = p: { name = p;
213 value = {
214 source = "${pkgs.uucp}/bin/${p}";
215 owner = "root";
216 group = "root";
217 setuid = true;
218 setgid = false;
219 };
220 };
221 in listToAttrs (map wrapper ["uucico" "uuxqt" "cu" "uucp" "uuname" "uustat" "uux"]);
212 222
213 nixpkgs.config.packageOverrides = pkgs: with pkgs; { 223 nixpkgs.config.packageOverrides = pkgs: with pkgs; {
214 uucp = stdenv.lib.overrideDerivation uucp (oldAttrs: { 224 uucp = stdenv.lib.overrideDerivation uucp (oldAttrs: {
@@ -227,7 +237,7 @@ in {
227 choices as appropriate. */ 237 choices as appropriate. */
228 #if 1 238 #if 1
229 -#define MAIL_PROGRAM "/usr/lib/sendmail -t" 239 -#define MAIL_PROGRAM "/usr/lib/sendmail -t"
230 +#define MAIL_PROGRAM "/var/setuid-wrappers/sendmail -t" 240 +#define MAIL_PROGRAM "${config.security.wrapperDir}/sendmail -t"
231 /* #define MAIL_PROGRAM "/usr/sbin/sendmail -t" */ 241 /* #define MAIL_PROGRAM "/usr/sbin/sendmail -t" */
232 #define MAIL_PROGRAM_TO_BODY 1 242 #define MAIL_PROGRAM_TO_BODY 1
233 #define MAIL_PROGRAM_SUBJECT_BODY 1 243 #define MAIL_PROGRAM_SUBJECT_BODY 1
@@ -246,7 +256,7 @@ in {
246 *) from="$from@$relay";; 256 *) from="$from@$relay";;
247 esac 257 esac
248 258
249 exec /var/setuid-wrappers/sendmail -i -f "$from" -- "$@" 259 exec ${config.security.wrapperDir}/sendmail -G -i -f "$from" -- "$@"
250 ''; 260 '';
251 }; 261 };
252 262
@@ -254,6 +264,6 @@ in {
254 uucp 264 uucp
255 ]; 265 ];
256 266
257 services.cron.systemCronJobs = (map (name: "${config.services.uucp.interval} /var/setuid-wrappers/uucico -D -S ${name}") (if (config.services.uucp.interval != null) then config.services.uucp.remoteNodes else [])); 267 services.cron.systemCronJobs = (map (name: "${config.services.uucp.interval} ${config.security.wrapperDir}/uucico -D -S ${name}") (if (config.services.uucp.interval != null) then config.services.uucp.remoteNodes else []));
258 }; 268 };
259} 269}