1
0
Fork 0

Refactor overlays

This commit is contained in:
Malte 2023-02-11 15:14:51 +01:00
parent 28d4016f88
commit 6e60f26cf7
22 changed files with 147 additions and 138 deletions

View file

@ -425,9 +425,6 @@
"nixos-mailserver": "nixos-mailserver", "nixos-mailserver": "nixos-mailserver",
"nixos-stable": "nixos-stable", "nixos-stable": "nixos-stable",
"nixos-unstable": "nixos-unstable", "nixos-unstable": "nixos-unstable",
"nixpkgs": [
"nixos-unstable"
],
"pre-commit-hooks": "pre-commit-hooks", "pre-commit-hooks": "pre-commit-hooks",
"secrets": "secrets" "secrets": "secrets"
} }

View file

@ -36,7 +36,6 @@
url = "git+https://gitlab.com/simple-nixos-mailserver/nixos-mailserver.git"; url = "git+https://gitlab.com/simple-nixos-mailserver/nixos-mailserver.git";
}; };
nixos-stable.url = "nixpkgs/nixos-22.11"; nixos-stable.url = "nixpkgs/nixos-22.11";
nixpkgs.follows = "nixos-unstable";
flake-parts.inputs.nixpkgs-lib.follows = "nixos-unstable"; flake-parts.inputs.nixpkgs-lib.follows = "nixos-unstable";
home-manager = { home-manager = {
url = "home-manager/release-22.11"; url = "home-manager/release-22.11";
@ -58,21 +57,26 @@
}; };
}; };
outputs = inputs @ {nixos-hardware, ...}: outputs = inputs @ {
nixos-hardware,
self,
...
}:
inputs.flake-parts.lib.mkFlake {inherit inputs;} { inputs.flake-parts.lib.mkFlake {inherit inputs;} {
imports = [ imports = [
inputs.pre-commit-hooks.flakeModule inputs.pre-commit-hooks.flakeModule
./nixos/flake-parts.nix ./nixos/flake-parts.nix
./home-manager/flake-parts.nix ./home-manager/flake-parts.nix
./packages/flake-parts.nix ./packages/flake-parts.nix
./overlays/flake-parts.nix
]; ];
systems = ["x86_64-linux"]; systems = ["x86_64-linux"];
perSystem = { perSystem = {
self', self',
inputs', inputs',
pkgs,
config, config,
lib, lib,
pkgs,
... ...
}: { }: {
devShells = { devShells = {
@ -81,14 +85,14 @@
}; };
}; };
checks = { checks = {
system-checks = pkgs.runCommand "system-checks" {} '' system-checks = pkgs.recursiveLinkFarm "all-configs" {
mkdir -p $out nixos-configurations = lib.mapAttrs (_: config: config.config.system.build.toplevel) self.nixosConfigurations;
${lib.concatMapStringsSep "\n" (x: x) (lib.mapAttrsToList (name: x: "ln -s ${x.config.system.build.toplevel} $out/${name}-system") inputs.self.nixosConfigurations)} home-manager-configurations = self.homeModes;
${lib.concatMapStringsSep "\n" (x: x) (lib.mapAttrsToList (name: x: "ln -s ${x} $out/${name}-home") inputs.self.homeModes)} };
'';
}; };
pre-commit = { pre-commit = {
pkgs = inputs'.nixos-unstable.legacyPackages;
check.enable = true; check.enable = true;
settings = { settings = {
settings.ormolu.defaultExtensions = [ settings.ormolu.defaultExtensions = [

View file

@ -4,8 +4,11 @@
inputs, inputs,
... ...
}: { }: {
flake = withSystem "x86_64-linux" ({inputs', ...}: let flake = withSystem "x86_64-linux" ({
pkgs = inputs'.nixos-stable.legacyPackages; self',
pkgs,
...
}: let
flattenAttrs = attrs: flattenAttrs = attrs:
lib.listToAttrs (lib.flatten (lib.mapAttrsToList lib.listToAttrs (lib.flatten (lib.mapAttrsToList
( (
@ -22,14 +25,14 @@
inherit pkgs; inherit pkgs;
modules = [ modules = [
config config
inputs.self.nixosModules.insertOverlays
inputs.emanote.homeManagerModule inputs.emanote.homeManagerModule
]; ];
}); });
buildModesForHost = host: modes: buildModesForHost = host: modes:
pkgs.runCommandLocal "${host}-modes" {} '' pkgs.recursiveLinkFarm "${host}-modes"
mkdir $out (lib.mapAttrs
${lib.concatStringsSep "\n" (lib.mapAttrsToList (mode: config: "ln -s ${(buildHomeManager config).activationPackage} $out/${mode}") modes)}''; (_: config: (buildHomeManager config).activationPackage)
modes);
in { in {
homeConfigurations = lib.mapAttrs (_: buildHomeManager) (flattenAttrs machines); homeConfigurations = lib.mapAttrs (_: buildHomeManager) (flattenAttrs machines);
homeModes = lib.mapAttrs buildModesForHost machines; homeModes = lib.mapAttrs buildModesForHost machines;

View file

@ -55,6 +55,7 @@ in {
move-to-monitor-up = []; move-to-monitor-up = [];
move-to-workspace-left = []; move-to-workspace-left = [];
move-to-workspace-right = []; move-to-workspace-right = [];
toggle-fullscreen = ["<Super>f"];
}; };
"org/gnome/mutter/keybindings" = { "org/gnome/mutter/keybindings" = {

View file

@ -8,7 +8,7 @@
playlist_dir = "${audio_dir}/playlists"; playlist_dir = "${audio_dir}/playlists";
in { in {
home.file."media/audio/playlists" = { home.file."media/audio/playlists" = {
source = pkgs.setToDirectories (lib.mapAttrs' (name: content: lib.nameValuePair "${name}.m3u" (builtins.toFile "${name}.m3u" content)) { source = pkgs.recursiveLinkFarm "mpd-playlists" (lib.mapAttrs' (name: content: lib.nameValuePair "${name}.m3u" (builtins.toFile "${name}.m3u" content)) {
"radio-swiss-classic" = "https://stream.srg-ssr.ch/m/rsc_de/aacp_96"; "radio-swiss-classic" = "https://stream.srg-ssr.ch/m/rsc_de/aacp_96";
"radio-swiss-jazz" = "https://stream.srg-ssr.ch/m/rsj/aacp_96"; "radio-swiss-jazz" = "https://stream.srg-ssr.ch/m/rsj/aacp_96";
"br-klassik" = "http://dispatcher.rndfnk.com/br/brklassik/live/mp3/high"; "br-klassik" = "http://dispatcher.rndfnk.com/br/brklassik/live/mp3/high";

View file

@ -1,7 +1,6 @@
{ {
pkgs, pkgs,
config, config,
flake-inputs,
... ...
}: let }: let
fix-tasks = pkgs.writeShellScriptBin "fix-tasks" '' fix-tasks = pkgs.writeShellScriptBin "fix-tasks" ''
@ -76,10 +75,10 @@ in {
dataLocation = "${config.home.homeDirectory}/.task"; dataLocation = "${config.home.homeDirectory}/.task";
config = { config = {
taskd = { taskd = {
certificate = "${flake-inputs.secrets}/taskwarrior/public.cert"; certificate = "${pkgs.flake-inputs.secrets}/taskwarrior/public.cert";
credentials = pkgs.privateValue "" "taskwarrior/credentials"; credentials = pkgs.privateValue "" "taskwarrior/credentials";
ca = "${flake-inputs.secrets}/taskwarrior/ca.cert"; ca = "${pkgs.flake-inputs.secrets}/taskwarrior/ca.cert";
key = "${flake-inputs.secrets}/taskwarrior/private.key"; key = "${pkgs.flake-inputs.secrets}/taskwarrior/private.key";
server = "hera.m-0.eu:53589"; server = "hera.m-0.eu:53589";
}; };
}; };

View file

@ -4,72 +4,46 @@
inputs, inputs,
... ...
}: { }: {
flake = withSystem "x86_64-linux" ({ flake = {
inputs', nixosConfigurations = withSystem "x86_64-linux" ({
system, system,
... self',
}: let pkgs,
networkingModule = name: "${inputs.nixos-unstable}/nixos/modules/services/networking/${name}.nix"; ...
modules = [ }: let
# nftables using module not available in 22.11. machines = builtins.attrNames (builtins.readDir ./machines);
(networkingModule "firewall-iptables") makeSystem = name:
(networkingModule "firewall-nftables") pkgs.nixos {
(networkingModule "firewall") imports = [
(networkingModule "nat-iptables")
(networkingModule "nat-nftables")
(networkingModule "nat")
(networkingModule "nftables")
(_: {
disabledModules = [
"services/networking/firewall.nix"
"services/networking/nftables.nix"
"services/networking/nat.nix"
"services/networking/redsocks.nix"
"services/networking/miniupnpd.nix"
"services/audio/roon-server.nix"
"services/audio/roon-bridge.nix"
];
})
];
makeSystem = name:
inputs'.nixos-stable.legacyPackages.nixos {
imports =
[
(import (./. + "/machines/${name}/configuration.nix") inputs) (import (./. + "/machines/${name}/configuration.nix") inputs)
inputs.secrets.nixosModules.default inputs.secrets.nixosModules.default
inputs.self.nixosModules.insertOverlays inputs.self.nixosModules.unstableNFTables
] ];
++ modules; };
}; in
in { lib.genAttrs machines makeSystem);
nixosModules.insertOverlays = _: { nixosModules.unstableNFTables = _: {
_module.args = { disabledModules = [
flake-inputs = inputs // {inherit modules;}; "services/networking/firewall.nix"
flake-inputs' = inputs'; "services/networking/nftables.nix"
}; "services/networking/nat.nix"
nixpkgs.overlays = "services/networking/redsocks.nix"
[ "services/networking/miniupnpd.nix"
(_: _: "services/audio/roon-server.nix"
{ "services/audio/roon-bridge.nix"
nix-output-monitor = inputs'.nix-output-monitor.packages.default; ];
unstable = inputs'.nixos-unstable.legacyPackages; imports = let
unfree = import inputs.nixos-stable { networkingModule = name: "${inputs.nixos-unstable}/nixos/modules/services/networking/${name}.nix";
inherit system; in [
config = { # nftables using module not available in 22.11.
allowUnfree = true; (networkingModule "firewall-iptables")
android_sdk.accept_license = true; (networkingModule "firewall-nftables")
}; (networkingModule "firewall")
}; (networkingModule "nat-iptables")
unstableUnfree = import inputs.nixos-unstable { (networkingModule "nat-nftables")
config.allowUnfree = true; (networkingModule "nat")
inherit system; (networkingModule "nftables")
}; ];
}
// inputs.secrets.private)
inputs.self.overlays.addMyHaskellPackages
]
++ import ../overlays {inherit lib;};
}; };
nixosConfigurations = lib.genAttrs (builtins.attrNames (builtins.readDir ./machines)) makeSystem; };
});
} }

View file

@ -2,7 +2,6 @@
pkgs, pkgs,
config, config,
lib, lib,
flake-inputs,
... ...
}: let }: let
adminCreds = adminCreds =
@ -77,13 +76,12 @@
autoStart = true; autoStart = true;
privateNetwork = true; privateNetwork = true;
hostBridge = "bridge"; hostBridge = "bridge";
config = {pkgs, ...}: { config = _: {
imports = imports = [
[ ../../roles
../../roles pkgs.flake-inputs.self.nixosModules.unstableNFTables
flake-inputs.self.nixosModules.insertOverlays ];
] nixpkgs = {inherit pkgs;};
++ flake-inputs.modules;
networking = { networking = {
interfaces.eth0 = { interfaces.eth0 = {

View file

@ -2,7 +2,6 @@
config, config,
pkgs, pkgs,
lib, lib,
flake-inputs,
... ...
}: let }: let
gitoliteCfg = config.services.gitolite; gitoliteCfg = config.services.gitolite;
@ -110,7 +109,7 @@ in {
cd $dir cd $dir
git clone git@localhost:gitolite-admin git clone git@localhost:gitolite-admin
cd gitolite-admin cd gitolite-admin
cp -r ${flake-inputs.secrets}/gitolite/* . cp -r ${pkgs.flake-inputs.secrets}/gitolite/* .
if [[ "$(git status --porcelain)" != "" ]]; then if [[ "$(git status --porcelain)" != "" ]]; then
git "config" "user.email" "git@hera.m-0.eu" git "config" "user.email" "git@hera.m-0.eu"
git "config" "user.name" "git user" git "config" "user.name" "git user"

View file

@ -1,9 +1,5 @@
{ {pkgs, ...}: let
pkgs, nur = pkgs.flake-inputs'.hexa-nur-packages.packages;
flake-inputs,
...
}: let
nur = flake-inputs.hexa-nur-packages.packages.x86_64-linux;
mkLovelaceModule = name: { mkLovelaceModule = name: {
url = "custom/${name}.js?${nur.hassLovelaceModules."${name}".version}"; url = "custom/${name}.js?${nur.hassLovelaceModules."${name}".version}";

View file

@ -70,7 +70,7 @@ in {
LimitNOFILE = "1024000"; LimitNOFILE = "1024000";
}; };
after = ["network.target"]; after = ["network.target"];
preStart = "ln -sfT ${pkgs.setToDirectories (addTimeouts cfg.cfgFiles)} ${cfgDir}"; preStart = "ln -sfT ${pkgs.recursiveLinkFarm "laminar-config-dir" (addTimeouts cfg.cfgFiles)} ${cfgDir}";
}; };
services = { services = {
nginx = { nginx = {

View file

@ -38,7 +38,7 @@ in {
"paths.fhs".template_dir = "paths.fhs".template_dir =
lib.mkForce lib.mkForce
( (
pkgs.setToDirectories { pkgs.recursiveLinkFarm "mailman-templates" {
site.de = { site.de = {
"list:user:notice:goodbye.txt" = builtins.toFile "goodbye" '' "list:user:notice:goodbye.txt" = builtins.toFile "goodbye" ''
Du erhältst nun keine E-Mails mehr über diese Mailingliste. Du erhältst nun keine E-Mails mehr über diese Mailingliste.

View file

@ -1,4 +0,0 @@
self: super: {
inherit (super.unfree) discord zoom-us minecraft teamviewer steam androidsdk_9_0;
inherit (super.unstableUnfree) minecraft-server;
}

View file

@ -1,7 +0,0 @@
final: prev: let
myPkgs = import ./packages.nix;
in {
myHaskellPackages = myPkgs.makeHaskellPackages prev.unstableHaskellPackages;
myHaskellScriptPackages = myPkgs.makeHaskellScriptPackages prev.haskellPackages;
ghcWithPackages = prev.unstableGhc.withHoogle (p: builtins.attrValues (myPkgs.makeHaskellPackages p));
}

View file

@ -1,12 +0,0 @@
{lib}: let
overlayPath = ./.;
candidates = lib.attrNames (builtins.readDir overlayPath);
pathToOverlay = n: overlayPath + ("/" + n);
isNixFile = n: builtins.match ".*\\.nix" n != null;
isNixDir = n: builtins.pathExists (pathToOverlay n + "/default.nix");
notDefault = n: n != "default.nix";
isOverlay = n: (isNixDir n || isNixFile n) && notDefault n;
overlays = builtins.filter isOverlay candidates;
importOverlay = n: import (pathToOverlay n);
in
map importOverlay overlays

View file

@ -1,18 +1,20 @@
_: prev: let final: _: let
inherit (prev) lib; inherit (final) lib;
linkToPath = path: fileOrDir: ( linkToPath = path: fileOrDir: (
if prev.lib.types.path.check fileOrDir if final.lib.types.path.check fileOrDir
then ["ln -sT ${fileOrDir} ${path}"] then [
{
name = lib.concatStringsSep "/" path;
path = fileOrDir;
}
]
else else
["mkdir -p ${path}"] lib.concatLists (
++ lib.concatLists (
lib.mapAttrsToList lib.mapAttrsToList
(dirName: linkToPath "${path}/${dirName}") (dirName: linkToPath (path ++ [dirName]))
fileOrDir fileOrDir
) )
); );
in { in {
setToDirectories = files: recursiveLinkFarm = name: files: final.linkFarm name (linkToPath [] files);
prev.runCommand "set-to-directories" {}
(lib.concatStringsSep "\n" (linkToPath "$out" files));
} }

33
overlays/flake-parts.nix Normal file
View file

@ -0,0 +1,33 @@
{
lib,
inputs,
...
}: {
perSystem = {
inputs',
system,
...
}: {
_module.args.pkgs = inputs'.nixos-stable.legacyPackages.appendOverlays (
[
(_: _: {
flake-inputs = inputs;
flake-inputs' = inputs';
})
inputs.self.overlays.addMyHaskellPackages
]
++ (let
overlayPath = ./.;
candidates = lib.attrNames (builtins.readDir overlayPath);
pathToOverlay = n: overlayPath + ("/" + n);
isNixFile = n: builtins.match ".*\\.nix" n != null;
isNixDir = n: builtins.pathExists (pathToOverlay n + "/default.nix");
notDefault = n: n != "flake-parts.nix";
isOverlay = n: (isNixDir n || isNixFile n) && notDefault n;
overlays = builtins.filter isOverlay candidates;
importOverlay = n: import (pathToOverlay n);
in
map importOverlay overlays)
);
};
}

7
overlays/ghc/default.nix Normal file
View file

@ -0,0 +1,7 @@
final: _: let
myPkgs = import ./packages.nix;
in {
myHaskellPackages = myPkgs.makeHaskellPackages final.unstableHaskellPackages;
myHaskellScriptPackages = myPkgs.makeHaskellScriptPackages final.haskellPackages;
ghcWithPackages = final.unstableGhc.withHoogle (p: builtins.attrValues (myPkgs.makeHaskellPackages p));
}

View file

@ -1,4 +1,6 @@
self: super: { self: super: {
nix-output-monitor = self.flake-inputs'.nix-output-monitor.packages.default;
unstable = self.flake-inputs'.nixos-unstable.legacyPackages;
unstableHaskellPackages = self.unstable.haskellPackages; unstableHaskellPackages = self.unstable.haskellPackages;
unstableGhc = self.unstable.ghc; unstableGhc = self.unstable.ghc;
inherit inherit

1
overlays/private.nix Normal file
View file

@ -0,0 +1 @@
_: prev: prev.flake-inputs.secrets.private

16
overlays/unfree.nix Normal file
View file

@ -0,0 +1,16 @@
self: super: let
unfree = import self.flake-inputs.nixos-stable {
inherit (self) system;
config = {
allowUnfree = true;
android_sdk.accept_license = true;
};
};
unstableUnfree = import self.flake-inputs.nixos-unstable {
config.allowUnfree = true;
inherit (self) system;
};
in {
inherit (unfree) discord zoom-us minecraft teamviewer steam androidsdk_9_0;
inherit (unstableUnfree) minecraft-server;
}