summary refs log tree commit diff
path: root/pkgs/os-specific
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/os-specific')
-rw-r--r--pkgs/os-specific/linux/spectrum/rootfs/default.nix43
-rw-r--r--pkgs/os-specific/linux/spectrum/rootfs/generic.nix15
-rw-r--r--pkgs/os-specific/linux/spectrum/rootfs/rc-services.nix26
-rw-r--r--pkgs/os-specific/linux/spectrum/rootfs/stage1.nix22
4 files changed, 77 insertions, 29 deletions
diff --git a/pkgs/os-specific/linux/spectrum/rootfs/default.nix b/pkgs/os-specific/linux/spectrum/rootfs/default.nix
index 6f46ad8054b..70ddac4c545 100644
--- a/pkgs/os-specific/linux/spectrum/rootfs/default.nix
+++ b/pkgs/os-specific/linux/spectrum/rootfs/default.nix
@@ -35,17 +35,44 @@ makeRootfs {
     ${busybox}/bin/getty -i -n -l ${login} 38400 ttyS0
   '';
 
-  run = ''
-    if { chown user /dev/wl0 }
+  rcServices.ok-all = {
+    type = writeText "ok-all-type" ''
+      bundle
+    '';
+    contents = writeText "ok-all-contents" ''
+      wayfire
+    '';
+  };
 
-    s6-applyuidgid -u 1000 -g 1000
-    export XDG_RUNTIME_DIR /run/user/1000
+  rcServices.wayfire = {
+    type = writeText "wayfire-type" ''
+      longrun
+    '';
+    run = writeScript "wayfire-run" ''
+      #! ${execline}/bin/execlineb -S0
 
-    export PATH ${lib.makeBinPath path}
+      s6-applyuidgid -u 1000 -g 1000
 
-    ${sommelier}/bin/sommelier
-    wayfire -c ${wayfireConfig}
-  '';
+      export HOME /
+      export PATH ${lib.makeBinPath path}
+      export XDG_RUNTIME_DIR /run/user/1000
+
+      ${sommelier}/bin/sommelier
+      wayfire -c ${wayfireConfig}
+    '';
+    dependencies = writeText "wayfire-dependencies" ''
+      wl0
+    '';
+  };
+
+  rcServices.wl0 = {
+    type = writeText "wl0-type" ''
+      oneshot
+    '';
+    up = writeText "wl0-run" ''
+      chown user /dev/wl0
+    '';
+  };
 
   fonts = [ source-code-pro ];
 }
diff --git a/pkgs/os-specific/linux/spectrum/rootfs/generic.nix b/pkgs/os-specific/linux/spectrum/rootfs/generic.nix
index 81fb80a614f..4122abf80c6 100644
--- a/pkgs/os-specific/linux/spectrum/rootfs/generic.nix
+++ b/pkgs/os-specific/linux/spectrum/rootfs/generic.nix
@@ -1,14 +1,14 @@
 { runCommandNoCC, writeScript, writeReferencesToFile, makeFontsConf, lib
-, dash, execline, s6, s6-portable-utils, s6-linux-utils, s6-linux-init, busybox
+, dash, execline, s6, s6-rc, s6-portable-utils, s6-linux-utils, s6-linux-init, busybox
 , mesa, squashfs-tools-ng
 }:
 
-{ services, run, fonts ? [], path ? [] }:
+{ services, rcServices ? {}, fonts ? [], path ? [] }:
 
 let
-  makeStage1 = import ./stage1.nix {
+  stage1 = import ./stage1.nix {
     inherit writeScript lib
-      execline s6 s6-portable-utils s6-linux-utils s6-linux-init busybox mesa
+      execline s6 s6-rc s6-portable-utils s6-linux-utils s6-linux-init busybox mesa
       path;
   };
 
@@ -16,6 +16,10 @@ let
     inherit runCommandNoCC writeScript lib execline;
   };
 
+  makeRcServicesDir = import ./rc-services.nix {
+    inherit runCommandNoCC lib s6-rc;
+  };
+
   fontsConf = makeFontsConf { fontDirectories = fonts; };
 
   squashfs = runCommandNoCC "root-squashfs" {} ''
@@ -34,7 +38,7 @@ let
 
     mkdir bin sbin dev proc run sys tmp
     ln -s ${dash}/bin/dash bin/sh
-    ln -s ${makeStage1 { inherit run; }} sbin/init
+    ln -s ${stage1} sbin/init
     cp -r ${./etc} etc
     chmod u+w etc
 
@@ -43,6 +47,7 @@ let
 
     touch etc/login.defs
     cp -r ${makeServicesDir { inherit services; }} etc/service
+    cp -r ${makeRcServicesDir { services = rcServices; }} etc/s6-rc
   '';
 in
 rootfs
diff --git a/pkgs/os-specific/linux/spectrum/rootfs/rc-services.nix b/pkgs/os-specific/linux/spectrum/rootfs/rc-services.nix
new file mode 100644
index 00000000000..4c942189c5e
--- /dev/null
+++ b/pkgs/os-specific/linux/spectrum/rootfs/rc-services.nix
@@ -0,0 +1,26 @@
+{ runCommandNoCC, lib, s6-rc }:
+
+{ services ? [] }:
+
+let
+  inherit (lib) concatStrings escapeShellArg mapAttrsToList optionalString;
+
+  source = runCommandNoCC "s6-services-source" {} ''
+    mkdir $out
+    ${concatStrings (mapAttrsToList (name: attrs: ''
+      mkdir $out/${name}
+      ${concatStrings (mapAttrsToList (key: value: ''
+        cp ${value} $out/${name}/${key}
+      '') attrs)}
+    '') services)}
+  '';
+
+  s6RcCompile = { fdhuser ? null }: source:
+    runCommandNoCC "s6-rc-compile" {} ''
+      ${s6-rc}/bin/s6-rc-compile \
+        ${optionalString (fdhuser != null) "-h ${escapeShellArg fdhuser}"} \
+        $out ${source}
+    '';
+in
+
+s6RcCompile {} source
diff --git a/pkgs/os-specific/linux/spectrum/rootfs/stage1.nix b/pkgs/os-specific/linux/spectrum/rootfs/stage1.nix
index 6caf9ff93b8..13de2d09876 100644
--- a/pkgs/os-specific/linux/spectrum/rootfs/stage1.nix
+++ b/pkgs/os-specific/linux/spectrum/rootfs/stage1.nix
@@ -1,13 +1,11 @@
 { writeScript, lib
-, execline, s6, s6-portable-utils, s6-linux-utils, s6-linux-init, busybox, mesa
+, execline, s6, s6-rc, s6-portable-utils, s6-linux-utils, s6-linux-init, busybox, mesa
 , path ? []
 }:
 
-{ run ? "true" }:
-
 let
   path' = path ++ [
-    s6 s6-portable-utils s6-linux-utils s6-linux-init busybox execline
+    s6 s6-rc s6-portable-utils s6-linux-utils s6-linux-init busybox execline
   ];
 in
 
@@ -16,8 +14,6 @@ writeScript "init-stage1" ''
   export PATH ${lib.makeBinPath path'}
   ${s6}/bin/s6-setsid -qb --
 
-  importas -i spectrumcmd spectrumcmd
-
   umask 022
   if { s6-mount -t tmpfs -o mode=0755 tmpfs /run }
   if { s6-hiercopy /etc/service /run/service }
@@ -25,6 +21,9 @@ writeScript "init-stage1" ''
 
   background {
     s6-setsid --
+
+    if { s6-rc-init -c /etc/s6-rc /run/service }
+
     if { s6-mkdir -p /run/user/0 /dev/pts /dev/shm }
     if { install -o user -g user -d /run/user/1000 }
     if { s6-mount -t devpts -o gid=4,mode=620 none /dev/pts }
@@ -33,16 +32,7 @@ writeScript "init-stage1" ''
     if { s6-mount -t sysfs none /sys }
     if { s6-ln -s ${mesa.drivers} /run/opengl-driver }
 
-    export HOME /
-    export XDG_RUNTIME_DIR /run/user/0
-    foreground {
-      ifelse { test -n $spectrumcmd }
-        { pipeline { heredoc 0 $spectrumcmd base64 -d } /bin/sh }
-        ${run}
-    }
-    importas -i ? ?
-    if { s6-echo STATUS: $? }
-    s6-svscanctl -6 /run/service
+    s6-rc change ok-all
   }
 
   unexport !