diff options
Diffstat (limited to 'pkgs/os-specific')
-rw-r--r-- | pkgs/os-specific/linux/spectrum/rootfs/default.nix | 43 | ||||
-rw-r--r-- | pkgs/os-specific/linux/spectrum/rootfs/generic.nix | 15 | ||||
-rw-r--r-- | pkgs/os-specific/linux/spectrum/rootfs/rc-services.nix | 26 | ||||
-rw-r--r-- | pkgs/os-specific/linux/spectrum/rootfs/stage1.nix | 22 |
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 ! |