diff options
author | Gregor Kleen <gkleen@yggdrasil.li> | 2022-01-06 00:34:45 +0100 |
---|---|---|
committer | Gregor Kleen <gkleen@yggdrasil.li> | 2022-01-06 00:34:45 +0100 |
commit | c9bf4a2b4a3e3551cded907cc8feacb360f322af (patch) | |
tree | 03ec4638f7defe44777827126022c0190311d44f /flake.nix | |
parent | 25c2a4130147f175071acbdade3face6932e5303 (diff) | |
download | ap01-c9bf4a2b4a3e3551cded907cc8feacb360f322af.tar ap01-c9bf4a2b4a3e3551cded907cc8feacb360f322af.tar.gz ap01-c9bf4a2b4a3e3551cded907cc8feacb360f322af.tar.bz2 ap01-c9bf4a2b4a3e3551cded907cc8feacb360f322af.tar.xz ap01-c9bf4a2b4a3e3551cded907cc8feacb360f322af.zip |
working prototype
Diffstat (limited to 'flake.nix')
-rw-r--r-- | flake.nix | 78 |
1 files changed, 73 insertions, 5 deletions
@@ -6,7 +6,7 @@ | |||
6 | type = "github"; | 6 | type = "github"; |
7 | owner = "openwrt"; | 7 | owner = "openwrt"; |
8 | repo = "openwrt"; | 8 | repo = "openwrt"; |
9 | ref = "openwrt-21.02"; | 9 | ref = "master"; |
10 | flake = false; | 10 | flake = false; |
11 | }; | 11 | }; |
12 | flake-utils = { | 12 | flake-utils = { |
@@ -21,6 +21,23 @@ | |||
21 | repo = "nixpkgs"; | 21 | repo = "nixpkgs"; |
22 | ref = "master"; | 22 | ref = "master"; |
23 | }; | 23 | }; |
24 | |||
25 | openwrt-packages = { | ||
26 | url = "git+https://git.openwrt.org/feed/packages.git"; | ||
27 | flake = false; | ||
28 | }; | ||
29 | openwrt-luci = { | ||
30 | url = "git+https://git.openwrt.org/project/luci.git"; | ||
31 | flake = false; | ||
32 | }; | ||
33 | openwrt-routing = { | ||
34 | url = "git+https://git.openwrt.org/feed/routing.git"; | ||
35 | flake = false; | ||
36 | }; | ||
37 | openwrt-telephony = { | ||
38 | url = "git+https://git.openwrt.org/feed/telephony.git"; | ||
39 | flake = false; | ||
40 | }; | ||
24 | }; | 41 | }; |
25 | 42 | ||
26 | outputs = { self, openwrt, nixpkgs, flake-utils, ... }@inputs: flake-utils.lib.eachDefaultSystem (system: | 43 | outputs = { self, openwrt, nixpkgs, flake-utils, ... }@inputs: flake-utils.lib.eachDefaultSystem (system: |
@@ -43,7 +60,7 @@ | |||
43 | inherit targetPkgs; | 60 | inherit targetPkgs; |
44 | extraOutputsToInstall = [ "dev" ]; | 61 | extraOutputsToInstall = [ "dev" ]; |
45 | profile = '' | 62 | profile = '' |
46 | export hardeningDisable=all | 63 | export NIX_HARDENING_ENABLE= |
47 | ''; | 64 | ''; |
48 | } // extraAttrs); | 65 | } // extraAttrs); |
49 | targetPkgs = pkgs: with pkgs; [ | 66 | targetPkgs = pkgs: with pkgs; [ |
@@ -74,16 +91,67 @@ | |||
74 | 91 | ||
75 | pkgconfig | 92 | pkgconfig |
76 | ]; | 93 | ]; |
94 | |||
95 | openwrtWithPackages = pkgs.stdenv.mkDerivation { | ||
96 | name = "openwrt-with-packages"; | ||
97 | src = openwrt; | ||
98 | patchPhase = let | ||
99 | feedsConf = pkgs.writeText "feeds.conf" '' | ||
100 | src-link packages ${inputs.openwrt-packages} | ||
101 | src-link luci ${inputs.openwrt-luci} | ||
102 | src-link routing ${inputs.openwrt-routing} | ||
103 | src-link telephony ${inputs.openwrt-telephony} | ||
104 | ''; | ||
105 | in '' | ||
106 | rm feeds.conf.default | ||
107 | cp ${feedsConf} feeds.conf | ||
108 | ''; | ||
109 | buildPhase = '' | ||
110 | ${let | ||
111 | runScript = pkgs.writeShellScript "build" '' | ||
112 | ./scripts/feeds update -a | ||
113 | ./scripts/feeds install -a | ||
114 | ''; | ||
115 | in fhs { inherit runScript; }}/bin/openwrt-env | ||
116 | ''; | ||
117 | installPhase = '' | ||
118 | cp -r . $out | ||
119 | ''; | ||
120 | }; | ||
77 | in { | 121 | in { |
78 | devShell = pkgs.mkShell { | 122 | devShell = pkgs.mkShell { |
79 | name = "openwrt"; | 123 | name = "openwrt"; |
80 | shellHook = let | 124 | shellHook = let |
81 | setup = pkgs.writeText "setup" '' | 125 | setup = pkgs.writeText "setup" '' |
82 | cd $TMPDIR | 126 | set -ex |
83 | ${pkgs.rsync}/bin/rsync --chmod D+x,+r,u+w --exclude .keep -rlptD ${openwrt}/. ${./files}/. . | 127 | |
84 | find ${./patches} -type f -name '*.patch' -exec patch '{}' ';'; | 128 | function unpackPhase() { |
129 | ${pkgs.rsync}/bin/rsync --chmod=u+wX -rlptD ${openwrtWithPackages}/. ${./files}/. ./. | ||
130 | |||
131 | patchDir=$(mktemp -d patches.XXXXXXXXXX) | ||
132 | ${pkgs.rsync}/bin/rsync --chmod=u+wX -rlptD ${./patches}/. "$patchDir/." | ||
133 | |||
134 | while IFS= read -r -d $'\0' sopsFile; do | ||
135 | ${pkgs.sops}/bin/sops --output="''${sopsFile%.sops}" --decrypt "''${sopsFile}" | ||
136 | rm "''${sopsFile}" | ||
137 | done < <(find ./. "$patchDir" -type f -name '*.sops' -print0) | ||
138 | |||
139 | while IFS= read -r -d $'\0' patchFile; do | ||
140 | patch -p1 --batch <$patchFile | ||
141 | done < <(find "$patchDir" -type f -name '*.patch' -print0) | ||
142 | } | ||
143 | |||
144 | function buildPhase() { | ||
145 | make -j V=sc | ||
146 | } | ||
147 | |||
148 | set +ex | ||
85 | ''; | 149 | ''; |
86 | in "exec -- ${fhs { runScript = "bash --init-file ${setup}"; }}/bin/openwrt-env"; | 150 | in "exec -- ${fhs { runScript = "bash --init-file ${setup}"; }}/bin/openwrt-env"; |
87 | }; | 151 | }; |
152 | |||
153 | packages = { | ||
154 | inherit openwrtWithPackages; | ||
155 | }; | ||
88 | }); | 156 | }); |
89 | } | 157 | } |