summary refs log tree commit diff
path: root/pkgs/os-specific/linux/spectrum
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2020-12-19 15:12:04 +0000
committerAlyssa Ross <hi@alyssa.is>2021-04-14 23:37:53 +0000
commitfcd4c80bf0181e1179fdf7e7d49586ff14001b39 (patch)
treef1b89c735200f0facb5e3155bcd148fea044cd45 /pkgs/os-specific/linux/spectrum
parent67422997d0b1e4f0d7caecc4b041e14df331af6e (diff)
downloadnixpkgs-fcd4c80bf0181e1179fdf7e7d49586ff14001b39.tar
nixpkgs-fcd4c80bf0181e1179fdf7e7d49586ff14001b39.tar.gz
nixpkgs-fcd4c80bf0181e1179fdf7e7d49586ff14001b39.tar.bz2
nixpkgs-fcd4c80bf0181e1179fdf7e7d49586ff14001b39.tar.lz
nixpkgs-fcd4c80bf0181e1179fdf7e7d49586ff14001b39.tar.xz
nixpkgs-fcd4c80bf0181e1179fdf7e7d49586ff14001b39.tar.zst
nixpkgs-fcd4c80bf0181e1179fdf7e7d49586ff14001b39.zip
spectrumPackages.rootfs: add s6-rc support
This allows specifying s6-rc services (which can have dependencies,
and be taken up and down) in the same way that s6 services (which are
merely supervised) are declared.

This removes the spectrumcmd mechanism to clean up the boot process --
it could be reintroduced as an s6-rc service if required.

Message-Id: <20210411115740.29615-9-hi@alyssa.is>
Reviewed-by: Cole Helbling <cole.e.helbling@outlook.com>
Diffstat (limited to 'pkgs/os-specific/linux/spectrum')
-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 !