From 74cec7dd8e8278a939dc521ef57d243dde969342 Mon Sep 17 00:00:00 2001 From: Ryan Yin Date: Mon, 18 Dec 2023 00:44:18 +0800 Subject: [PATCH] feat: nix fmt --- .gitignore | 1 + flake.lock | 125 ++++++++++ flake.nix | 493 +++++++++++++++++++++------------------ modules/nixos/server.nix | 1 - 4 files changed, 389 insertions(+), 231 deletions(-) diff --git a/.gitignore b/.gitignore index 29f4f2fa..62ea0624 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ result result/ .DS_Store +.pre-commit-config.yaml diff --git a/flake.lock b/flake.lock index b28a7cb1..a04bd9db 100644 --- a/flake.lock +++ b/flake.lock @@ -274,6 +274,22 @@ "type": "github" } }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "flake-parts": { "inputs": { "nixpkgs-lib": [ @@ -334,6 +350,24 @@ "type": "github" } }, + "flake-utils_2": { + "inputs": { + "systems": "systems_3" + }, + "locked": { + "lastModified": 1685518550, + "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "gitignore": { "inputs": { "nixpkgs": [ @@ -356,6 +390,27 @@ "type": "github" } }, + "gitignore_2": { + "inputs": { + "nixpkgs": [ + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1660459072, + "narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "a20de23b925fd8264fd7fad6454652e142fd7f73", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -664,6 +719,22 @@ "type": "github" } }, + "nixpkgs-stable_2": { + "locked": { + "lastModified": 1685801374, + "narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c37ca420157f4abc31e26f436c1145f8951ff373", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-unstable": { "locked": { "lastModified": 1702312524, @@ -760,6 +831,22 @@ "type": "github" } }, + "nixpkgs_7": { + "locked": { + "lastModified": 1689261696, + "narHash": "sha256-LzfUtFs9MQRvIoQ3MfgSuipBVMXslMPH/vZ+nM40LkA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "df1eee2aa65052a18121ed4971081576b25d6b5c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nur-ryan4yin": { "inputs": { "nixpkgs": "nixpkgs_6" @@ -795,6 +882,28 @@ "type": "github" } }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat_2", + "flake-utils": "flake-utils_2", + "gitignore": "gitignore_2", + "nixpkgs": "nixpkgs_7", + "nixpkgs-stable": "nixpkgs-stable_2" + }, + "locked": { + "lastModified": 1702456155, + "narHash": "sha256-I2XhXGAecdGlqi6hPWYT83AQtMgL+aa3ulA85RAEgOk=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "007a45d064c1c32d04e1b8a0de5ef00984c419bc", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, "pre-commit-hooks-nix": { "inputs": { "flake-compat": [ @@ -854,6 +963,7 @@ "nixpkgs-unstable": "nixpkgs-unstable", "nur-ryan4yin": "nur-ryan4yin", "nushell-scripts": "nushell-scripts", + "pre-commit-hooks": "pre-commit-hooks", "wallpapers": "wallpapers" } }, @@ -912,6 +1022,21 @@ "type": "github" } }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "thead-kernel": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index 21b8c714..bd51fd78 100644 --- a/flake.nix +++ b/flake.nix @@ -13,262 +13,292 @@ # parameters in `outputs` are defined in `inputs` and can be referenced by their names. # However, `self` is an exception, this special parameter points to the `outputs` itself (self-reference) # The `@` syntax here is used to alias the attribute set of the inputs's parameter, making it convenient to use inside the function. - outputs = inputs @ { - self, - nixpkgs, - nixpkgs-unstable, - nix-darwin, - home-manager, - nixos-generators, - nixos-licheepi4a, - nixos-rk3588, - ... - }: let - username = "ryan"; - userfullname = "Ryan Yin"; - useremail = "xiaoyin_c@qq.com"; + outputs = + inputs @ { self + , nixpkgs + , nixpkgs-unstable + , pre-commit-hooks + , nix-darwin + , home-manager + , nixos-generators + , nixos-licheepi4a + , nixos-rk3588 + , ... + }: + let + username = "ryan"; + userfullname = "Ryan Yin"; + useremail = "xiaoyin_c@qq.com"; - x64_system = "x86_64-linux"; - x64_darwin = "x86_64-darwin"; - riscv64_system = "riscv64-linux"; - aarch64_system = "aarch64-linux"; - allSystems = [x64_system x64_darwin riscv64_system aarch64_system]; + x64_system = "x86_64-linux"; + x64_darwin = "x86_64-darwin"; + riscv64_system = "riscv64-linux"; + aarch64_system = "aarch64-linux"; + allSystems = [ x64_system x64_darwin riscv64_system aarch64_system ]; - nixosSystem = import ./lib/nixosSystem.nix; - macosSystem = import ./lib/macosSystem.nix; - colmenaSystem = import ./lib/colmenaSystem.nix; + nixosSystem = import ./lib/nixosSystem.nix; + macosSystem = import ./lib/macosSystem.nix; + colmenaSystem = import ./lib/colmenaSystem.nix; - # 星野 アイ, Hoshino Ai - idol_ai_modules_i3 = { - nixos-modules = [ - ./hosts/idols/ai - ./modules/nixos/i3.nix - ]; - home-module = import ./home/linux/desktop-i3.nix; - }; - idol_ai_modules_hyprland = { - nixos-modules = [ - ./hosts/idols/ai - ./modules/nixos/hyprland.nix - ]; - home-module = import ./home/linux/desktop-hyprland.nix; - }; - - # 星野 愛久愛海, Hoshino Akuamarin - idol_aquamarine_modules = { - nixos-modules = [ - ./hosts/idols/aquamarine - ]; - home-module = import ./home/linux/server.nix; - }; - idol_aquamarine_tags = ["dist-build" "aqua"]; - - # 星野 瑠美衣, Hoshino Rubii - idol_ruby_modules = { - nixos-modules = [ - ./hosts/idols/ruby - ]; - home-module = import ./home/linux/server.nix; - }; - idol_ruby_tags = ["dist-build" "ruby"]; - - # 有馬 かな, Arima Kana - idol_kana_modules = { - nixos-modules = [ - ./hosts/idols/kana - ]; - home-module = import ./home/linux/server.nix; - }; - idol_kana_tags = ["dist-build" "kana"]; - - # 森友 望未, Moritomo Nozomi - rolling_nozomi_modules = { - nixos-modules = [ - ./hosts/rolling_girls/nozomi - ]; - # home-module = import ./home/linux/server-riscv64.nix; - }; - rolling_nozomi_tags = ["riscv" "nozomi"]; - - # 小坂 結季奈, Kosaka Yukina - rolling_yukina_modules = { - nixos-modules = [ - ./hosts/rolling_girls/yukina - ]; - # home-module = import ./home/linux/server-riscv64.nix; - }; - rolling_yukina_tags = ["riscv" "yukina"]; - - # 大木 鈴, Ōki Suzu - _12kingdoms_suzu_modules = { - nixos-modules = [ - ./hosts/12kingdoms/suzu - ]; - # home-module = import ./home/linux/server.nix; - }; - _12kingdoms_suzu_tags = ["aarch" "suzu"]; - - x64_specialArgs = - { - inherit username userfullname useremail; - # use unstable branch for some packages to get the latest updates - pkgs-unstable = import nixpkgs-unstable { - system = x64_system; # refer the `system` parameter form outer scope recursively - # To use chrome, we need to allow the installation of non-free software - config.allowUnfree = true; - }; - } - // inputs; - in { - nixosConfigurations = let - base_args = { - inherit home-manager nixos-generators; - nixpkgs = nixpkgs; # or nixpkgs-unstable - system = x64_system; - specialArgs = x64_specialArgs; + # 星野 アイ, Hoshino Ai + idol_ai_modules_i3 = { + nixos-modules = [ + ./hosts/idols/ai + ./modules/nixos/i3.nix + ]; + home-module = import ./home/linux/desktop-i3.nix; }; - in { - # ai with i3 window manager - ai_i3 = nixosSystem (idol_ai_modules_i3 // base_args); - # ai with hyprland compositor - ai_hyprland = nixosSystem (idol_ai_modules_hyprland // base_args); - - # three virtual machines without desktop environment. - aquamarine = nixosSystem (idol_aquamarine_modules // base_args); - ruby = nixosSystem (idol_ruby_modules // base_args); - kana = nixosSystem (idol_kana_modules // base_args); - }; - - # colmena - remote deployment via SSH - colmena = let - # x86_64 related - x64_base_args = { - inherit home-manager; - nixpkgs = nixpkgs; # or nixpkgs-unstable - specialArgs = x64_specialArgs; + idol_ai_modules_hyprland = { + nixos-modules = [ + ./hosts/idols/ai + ./modules/nixos/hyprland.nix + ]; + home-module = import ./home/linux/desktop-hyprland.nix; }; - # riscv64 related - # using the same nixpkgs as nixos-licheepi4a to utilize the cross-compilation cache. - lpi4a_pkgs = import nixos-licheepi4a.inputs.nixpkgs {system = x64_system;}; - lpi4a_specialArgs = - { - inherit username userfullname useremail; - pkgsKernel = nixos-licheepi4a.packages.${x64_system}.pkgsKernelCross; - } - // inputs; - lpi4a_base_args = { - inherit home-manager; - nixpkgs = nixos-licheepi4a.inputs.nixpkgs; # or nixpkgs-unstable - specialArgs = lpi4a_specialArgs; - targetUser = "root"; + # 星野 愛久愛海, Hoshino Akuamarin + idol_aquamarine_modules = { + nixos-modules = [ + ./hosts/idols/aquamarine + ]; + home-module = import ./home/linux/server.nix; }; + idol_aquamarine_tags = [ "dist-build" "aqua" ]; - # aarch64 related - # using the same nixpkgs as nixos-rk3588 to utilize the cross-compilation cache. - rk3588_pkgs = import nixos-rk3588.inputs.nixpkgs {system = x64_system;}; - rk3588_specialArgs = - { - inherit username userfullname useremail; - } - // nixos-rk3588.inputs; - rk3588_base_args = { - inherit home-manager; - nixpkgs = nixos-rk3588.inputs.nixpkgs; # or nixpkgs-unstable - specialArgs = rk3588_specialArgs; - targetUser = "root"; + # 星野 瑠美衣, Hoshino Rubii + idol_ruby_modules = { + nixos-modules = [ + ./hosts/idols/ruby + ]; + home-module = import ./home/linux/server.nix; }; - in { - meta = { - nixpkgs = import nixpkgs {system = x64_system;}; - specialArgs = x64_specialArgs; + idol_ruby_tags = [ "dist-build" "ruby" ]; - nodeSpecialArgs = { - # riscv64 SBCs - nozomi = lpi4a_specialArgs; - yukina = lpi4a_specialArgs; - - # aarch64 SBCs - suzu = rk3588_specialArgs; - }; - nodeNixpkgs = { - nozomi = lpi4a_pkgs; - yukina = lpi4a_pkgs; - - # aarch64 SBCs - suzu = rk3588_pkgs; - }; + # 有馬 かな, Arima Kana + idol_kana_modules = { + nixos-modules = [ + ./hosts/idols/kana + ]; + home-module = import ./home/linux/server.nix; }; + idol_kana_tags = [ "dist-build" "kana" ]; - # proxmox virtual machines(x86_64) - aquamarine = colmenaSystem (idol_aquamarine_modules // x64_base_args // {host_tags = idol_aquamarine_tags;}); - ruby = colmenaSystem (idol_ruby_modules // x64_base_args // {host_tags = idol_ruby_tags;}); - kana = colmenaSystem (idol_kana_modules // x64_base_args // {host_tags = idol_kana_tags;}); + # 森友 望未, Moritomo Nozomi + rolling_nozomi_modules = { + nixos-modules = [ + ./hosts/rolling_girls/nozomi + ]; + # home-module = import ./home/linux/server-riscv64.nix; + }; + rolling_nozomi_tags = [ "riscv" "nozomi" ]; - # riscv64 SBCs - nozomi = colmenaSystem (rolling_nozomi_modules // lpi4a_base_args // {host_tags = rolling_nozomi_tags;}); - yukina = colmenaSystem (rolling_yukina_modules // lpi4a_base_args // {host_tags = rolling_yukina_tags;}); + # 小坂 結季奈, Kosaka Yukina + rolling_yukina_modules = { + nixos-modules = [ + ./hosts/rolling_girls/yukina + ]; + # home-module = import ./home/linux/server-riscv64.nix; + }; + rolling_yukina_tags = [ "riscv" "yukina" ]; - # aarch64 SBCs - suzu = colmenaSystem (_12kingdoms_suzu_modules // rk3588_base_args // {host_tags = _12kingdoms_suzu_tags;}); - }; + # 大木 鈴, Ōki Suzu + _12kingdoms_suzu_modules = { + nixos-modules = [ + ./hosts/12kingdoms/suzu + ]; + # home-module = import ./home/linux/server.nix; + }; + _12kingdoms_suzu_tags = [ "aarch" "suzu" ]; - # take system images for idols - # https://github.com/nix-community/nixos-generators - packages."${x64_system}" = - # genAttrs returns an attribute set with the given keys and values(host => image). - nixpkgs.lib.genAttrs [ - "ai_i3" - "ai_hyprland" - ] ( - # generate iso image for hosts with desktop environment - host: - self.nixosConfigurations.${host}.config.formats.iso - ) - // nixpkgs.lib.genAttrs [ - "aquamarine" - "ruby" - "kana" - ] ( - # generate proxmox image for virtual machines without desktop environment - host: - self.nixosConfigurations.${host}.config.formats.proxmox - ); - - # macOS's configuration, for work. - darwinConfigurations = let - system = x64_darwin; - specialArgs = + x64_specialArgs = { inherit username userfullname useremail; # use unstable branch for some packages to get the latest updates pkgs-unstable = import nixpkgs-unstable { - inherit system; # refer the `system` parameter form outer scope recursively + system = x64_system; # refer the `system` parameter form outer scope recursively # To use chrome, we need to allow the installation of non-free software config.allowUnfree = true; }; } // inputs; - base_args = { - inherit nix-darwin home-manager system specialArgs nixpkgs; - }; - in { - harmonica = macosSystem (base_args - // { - darwin-modules = [ - ./hosts/harmonica - ]; - home-module = import ./home/darwin; - }); - }; + in + { + nixosConfigurations = + let + base_args = { + inherit home-manager nixos-generators; + nixpkgs = nixpkgs; # or nixpkgs-unstable + system = x64_system; + specialArgs = x64_specialArgs; + }; + in + { + # ai with i3 window manager + ai_i3 = nixosSystem (idol_ai_modules_i3 // base_args); + # ai with hyprland compositor + ai_hyprland = nixosSystem (idol_ai_modules_hyprland // base_args); - # format the nix code in this flake - # alejandra is a nix formatter with a beautiful output - formatter = nixpkgs.lib.genAttrs allSystems ( - system: + # three virtual machines without desktop environment. + aquamarine = nixosSystem (idol_aquamarine_modules // base_args); + ruby = nixosSystem (idol_ruby_modules // base_args); + kana = nixosSystem (idol_kana_modules // base_args); + }; + + # colmena - remote deployment via SSH + colmena = + let + # x86_64 related + x64_base_args = { + inherit home-manager; + nixpkgs = nixpkgs; # or nixpkgs-unstable + specialArgs = x64_specialArgs; + }; + + # riscv64 related + # using the same nixpkgs as nixos-licheepi4a to utilize the cross-compilation cache. + lpi4a_pkgs = import nixos-licheepi4a.inputs.nixpkgs { system = x64_system; }; + lpi4a_specialArgs = + { + inherit username userfullname useremail; + pkgsKernel = nixos-licheepi4a.packages.${x64_system}.pkgsKernelCross; + } + // inputs; + lpi4a_base_args = { + inherit home-manager; + nixpkgs = nixos-licheepi4a.inputs.nixpkgs; # or nixpkgs-unstable + specialArgs = lpi4a_specialArgs; + targetUser = "root"; + }; + + # aarch64 related + # using the same nixpkgs as nixos-rk3588 to utilize the cross-compilation cache. + rk3588_pkgs = import nixos-rk3588.inputs.nixpkgs { system = x64_system; }; + rk3588_specialArgs = + { + inherit username userfullname useremail; + } + // nixos-rk3588.inputs; + rk3588_base_args = { + inherit home-manager; + nixpkgs = nixos-rk3588.inputs.nixpkgs; # or nixpkgs-unstable + specialArgs = rk3588_specialArgs; + targetUser = "root"; + }; + in + { + meta = { + nixpkgs = import nixpkgs { system = x64_system; }; + specialArgs = x64_specialArgs; + + nodeSpecialArgs = { + # riscv64 SBCs + nozomi = lpi4a_specialArgs; + yukina = lpi4a_specialArgs; + + # aarch64 SBCs + suzu = rk3588_specialArgs; + }; + nodeNixpkgs = { + nozomi = lpi4a_pkgs; + yukina = lpi4a_pkgs; + + # aarch64 SBCs + suzu = rk3588_pkgs; + }; + }; + + # proxmox virtual machines(x86_64) + aquamarine = colmenaSystem (idol_aquamarine_modules // x64_base_args // { host_tags = idol_aquamarine_tags; }); + ruby = colmenaSystem (idol_ruby_modules // x64_base_args // { host_tags = idol_ruby_tags; }); + kana = colmenaSystem (idol_kana_modules // x64_base_args // { host_tags = idol_kana_tags; }); + + # riscv64 SBCs + nozomi = colmenaSystem (rolling_nozomi_modules // lpi4a_base_args // { host_tags = rolling_nozomi_tags; }); + yukina = colmenaSystem (rolling_yukina_modules // lpi4a_base_args // { host_tags = rolling_yukina_tags; }); + + # aarch64 SBCs + suzu = colmenaSystem (_12kingdoms_suzu_modules // rk3588_base_args // { host_tags = _12kingdoms_suzu_tags; }); + }; + + # take system images for idols + # https://github.com/nix-community/nixos-generators + packages."${x64_system}" = + # genAttrs returns an attribute set with the given keys and values(host => image). + nixpkgs.lib.genAttrs [ + "ai_i3" + "ai_hyprland" + ] + ( + # generate iso image for hosts with desktop environment + host: + self.nixosConfigurations.${host}.config.formats.iso + ) + // nixpkgs.lib.genAttrs [ + "aquamarine" + "ruby" + "kana" + ] + ( + # generate proxmox image for virtual machines without desktop environment + host: + self.nixosConfigurations.${host}.config.formats.proxmox + ); + + # macOS's configuration, for work. + darwinConfigurations = + let + system = x64_darwin; + specialArgs = + { + inherit username userfullname useremail; + # use unstable branch for some packages to get the latest updates + pkgs-unstable = import nixpkgs-unstable { + inherit system; # refer the `system` parameter form outer scope recursively + # To use chrome, we need to allow the installation of non-free software + config.allowUnfree = true; + }; + } + // inputs; + base_args = { + inherit nix-darwin home-manager system specialArgs nixpkgs; + }; + in + { + harmonica = macosSystem (base_args + // { + darwin-modules = [ + ./hosts/harmonica + ]; + home-module = import ./home/darwin; + }); + }; + + # format the nix code in this flake + # alejandra is a nix formatter with a beautiful output + formatter = nixpkgs.lib.genAttrs allSystems ( + system: nixpkgs.legacyPackages.${system}.alejandra - ); - }; + ); + + # pre-commit hooks for nix code + checks = nixpkgs.lib.genAttrs allSystems ( + system: { + pre-commit-check = pre-commit-hooks.lib.${system}.run { + src = ./.; + hooks = { + alejandra.enable = true; + }; + }; + } + ); + devShells = nixpkgs.lib.genAttrs allSystems ( + system: { + default = nixpkgs.legacyPackages.${system}.mkShell { + inherit (self.checks.${system}.pre-commit-check) shellHook; + }; + } + ); + }; # This is the standard format for flake.nix. `inputs` are the dependencies of the flake, # Each item in `inputs` will be passed as a parameter to the `outputs` function after being pulled and built. @@ -281,6 +311,9 @@ # nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; + # add git hooks to format nix code before commit + pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix"; + # for macos nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-23.11-darwin"; nix-darwin = { diff --git a/modules/nixos/server.nix b/modules/nixos/server.nix index 66a295c9..6a1f9c47 100644 --- a/modules/nixos/server.nix +++ b/modules/nixos/server.nix @@ -3,7 +3,6 @@ ./base/i18n.nix ./base/misc.nix ./base/networking.nix - ./base/peripherals.nix ./base/remote-building.nix ./base/user-group.nix ./base/visualisation.nix