config

NixOS config
Log | Files | Refs | README | LICENSE

flake.nix (12120B) - Raw


      1 {
      2   description = "motiejus/config";
      3 
      4   inputs = {
      5     nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
      6     nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
      7     flake-utils.url = "github:numtide/flake-utils";
      8     flake-compat.url = "github:nix-community/flake-compat";
      9     nixos-hardware.url = "github:NixOS/nixos-hardware/master";
     10     nur.url = "github:nix-community/NUR";
     11 
     12     home-manager.url = "github:nix-community/home-manager/release-25.11";
     13     home-manager.inputs.nixpkgs.follows = "nixpkgs";
     14 
     15     agenix = {
     16       url = "github:ryantm/agenix";
     17       inputs = {
     18         nixpkgs.follows = "nixpkgs";
     19         home-manager.follows = "home-manager";
     20         darwin.follows = "nix-darwin";
     21       };
     22     };
     23 
     24     deploy-rs = {
     25       url = "github:serokell/deploy-rs/5829cec63845eb50984dc8787b0edfe81bf5b980"; # https://github.com/serokell/deploy-rs/issues/325
     26       inputs = {
     27         nixpkgs.follows = "nixpkgs";
     28         flake-compat.follows = "flake-compat";
     29         utils.follows = "flake-utils";
     30       };
     31     };
     32 
     33     zig = {
     34       url = "github:mitchellh/zig-overlay";
     35       inputs = {
     36         nixpkgs.follows = "nixpkgs";
     37         flake-compat.follows = "flake-compat";
     38       };
     39     };
     40 
     41     nix-darwin = {
     42       url = "github:nix-darwin/nix-darwin/nix-darwin-25.11";
     43       inputs.nixpkgs.follows = "nixpkgs";
     44     };
     45 
     46     nix-index-database.url = "github:Mic92/nix-index-database";
     47     nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
     48 
     49     gitignore.url = "github:hercules-ci/gitignore.nix";
     50     gitignore.inputs.nixpkgs.follows = "nixpkgs";
     51 
     52     pre-commit-hooks = {
     53       url = "github:cachix/pre-commit-hooks.nix";
     54       inputs = {
     55         nixpkgs.follows = "nixpkgs";
     56         flake-compat.follows = "flake-compat";
     57         gitignore.follows = "gitignore";
     58       };
     59     };
     60   };
     61 
     62   nixConfig = {
     63     trusted-substituters = "https://cache.nixos.org/";
     64     trusted-public-keys = "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=";
     65     extra-experimental-features = "nix-command flakes";
     66   };
     67 
     68   outputs =
     69     {
     70       self,
     71       nixpkgs,
     72       nixpkgs-unstable,
     73       agenix,
     74       deploy-rs,
     75       flake-utils,
     76       home-manager,
     77       nixos-hardware,
     78       nix-index-database,
     79       nur,
     80       zig,
     81       nix-darwin,
     82       ...
     83     }@inputs:
     84     let
     85       myData = import ./data.nix;
     86 
     87       baseOverlays = [
     88         nur.overlays.default
     89         zig.overlays.default
     90 
     91         #(_self: super: { deploy-rs-pkg = super.deploy-rs; })
     92         deploy-rs.overlays.default
     93         #(_self: super: {
     94         #  deploy-rs = {
     95         #    deploy-rs = super.deploy-rs-pkg;
     96         #    inherit (super.deploy-rs) lib;
     97         #  };
     98         #  deploy-rs-pkg = null;
     99         #})
    100         (
    101           _: super:
    102           rec {
    103             gamja = super.callPackage ./pkgs/gamja.nix { };
    104             weather = super.callPackage ./pkgs/weather { };
    105             tmuxbash = super.callPackage ./pkgs/tmuxbash.nix { };
    106             gcloud-wrapped = super.callPackage ./pkgs/gcloud-wrapped { };
    107           }
    108           // super.lib.optionalAttrs super.stdenv.isDarwin {
    109             # fish gets SIGKILL in nix sandbox on darwin, breaking direnv tests
    110             direnv = super.direnv.overrideAttrs { doCheck = false; };
    111             xscreensaver-mac = super.callPackage ./pkgs/xscreensaver-mac.nix { };
    112           }
    113           // super.lib.optionalAttrs super.stdenv.isLinux rec {
    114             nicer = super.callPackage ./pkgs/nicer.nix { };
    115             claudes = super.callPackage ./pkgs/claudes.nix { };
    116             chronoctl = super.callPackage ./pkgs/chronoctl.nix { };
    117             mrescue-alpine = super.callPackage ./pkgs/mrescue-alpine.nix { };
    118 
    119             # needs 0.9.28+ for __attribute__((cleanup))
    120             tinycc = super.tinycc.overrideAttrs {
    121               version = "0.9.27-unstable-2026-02-07";
    122               src = super.fetchFromRepoOrCz {
    123                 repo = "tinycc";
    124                 rev = "4597a9621e70a337b241d424f4ab4729cb75b426";
    125                 hash = "sha256-/jm00d4BZQateOHkUatc9Y2ZofwvgkRgps72vgAOWno=";
    126               };
    127             };
    128 
    129             mkDebianLive = super.callPackage ./pkgs/mrescue-debian.nix { };
    130             mrescue-debian-xfce = mkDebianLive {
    131               flavor = "xfce";
    132               version = "13.3.0";
    133               hash = "sha256-xvHLR2gOOdsTIu7FrOZdxgfG6keqniEhhf9ywJmtNXQ=";
    134             };
    135 
    136             # NixOS netboot rescue image
    137             # Note: Update URL and hash manually from https://nixos.org/download
    138             mrescue-nixos = super.callPackage ./pkgs/mrescue-nixos.nix { };
    139           }
    140           // {
    141             pkgs-unstable = import nixpkgs-unstable {
    142               inherit (super.stdenv.hostPlatform) system;
    143               config.allowUnfree = true;
    144               overlays = [
    145                 (_self: super: {
    146                   go = super.go_1_26;
    147                   buildGoModule = super.buildGo126Module;
    148                   buildGoPackage = super.buildGo126Package;
    149                 })
    150               ];
    151             };
    152           }
    153         )
    154       ];
    155 
    156     in
    157     {
    158       #inherit (nixpkgs) legacyPackages;
    159 
    160       nixosConfigurations = {
    161         vm = nixpkgs.lib.nixosSystem {
    162           system = "x86_64-linux";
    163           modules = [
    164             { nixpkgs.overlays = baseOverlays; }
    165             ./hosts/vm/configuration.nix
    166             home-manager.nixosModules.home-manager
    167           ];
    168           specialArgs = {
    169             inherit myData;
    170           }
    171           // inputs;
    172         };
    173 
    174         fwminex = nixpkgs.lib.nixosSystem {
    175           system = "x86_64-linux";
    176           modules = [
    177             { nixpkgs.overlays = baseOverlays; }
    178             ./hosts/fwminex/configuration.nix
    179             home-manager.nixosModules.home-manager
    180             nixos-hardware.nixosModules.framework-12th-gen-intel
    181 
    182             agenix.nixosModules.default
    183           ];
    184 
    185           specialArgs = {
    186             inherit myData;
    187           }
    188           // inputs;
    189         };
    190 
    191         vno3-nk = nixpkgs.lib.nixosSystem {
    192           system = "x86_64-linux";
    193           modules = [
    194             { nixpkgs.overlays = baseOverlays; }
    195             ./hosts/vno3-nk/configuration.nix
    196             home-manager.nixosModules.home-manager
    197             agenix.nixosModules.default
    198           ];
    199 
    200           specialArgs = {
    201             inherit myData;
    202           }
    203           // inputs;
    204         };
    205 
    206         vno1-gdrx = nixpkgs.lib.nixosSystem {
    207           system = "x86_64-linux";
    208           modules = [
    209             { nixpkgs.overlays = baseOverlays; }
    210             ./hosts/vno1-gdrx/configuration.nix
    211             home-manager.nixosModules.home-manager
    212             nix-index-database.nixosModules.nix-index
    213 
    214             agenix.nixosModules.default
    215           ];
    216 
    217           specialArgs = {
    218             inherit myData;
    219           }
    220           // inputs;
    221         };
    222 
    223         fra1-c = nixpkgs.lib.nixosSystem {
    224           system = "x86_64-linux";
    225           modules = [
    226             { nixpkgs.overlays = baseOverlays; }
    227             agenix.nixosModules.default
    228             home-manager.nixosModules.home-manager
    229             ./hosts/fra1-c/configuration.nix
    230           ];
    231 
    232           specialArgs = {
    233             inherit myData;
    234           }
    235           // inputs;
    236         };
    237 
    238         vno2-desk2 = nixpkgs.lib.nixosSystem {
    239           system = "x86_64-linux";
    240           modules = [
    241             { nixpkgs.overlays = baseOverlays; }
    242             ./hosts/vno2-desk2/configuration.nix
    243             home-manager.nixosModules.home-manager
    244             agenix.nixosModules.default
    245           ];
    246 
    247           specialArgs = {
    248             inherit myData;
    249           }
    250           // inputs;
    251         };
    252 
    253       };
    254 
    255       darwinConfigurations = {
    256         macworx = nix-darwin.lib.darwinSystem {
    257           modules = [
    258             { nixpkgs.overlays = baseOverlays; }
    259             ./hosts/macworx/configuration.nix
    260             home-manager.darwinModules.home-manager
    261             agenix.darwinModules.default
    262           ];
    263           specialArgs = {
    264             inherit myData;
    265           }
    266           // inputs;
    267         };
    268       };
    269 
    270       deploy.nodes = {
    271         fwminex = {
    272           hostname = "fwminex.jakst.vpn";
    273           profiles = {
    274             system = {
    275               sshUser = "motiejus";
    276               path = self.nixosConfigurations.fwminex.pkgs.deploy-rs.lib.activate.nixos self.nixosConfigurations.fwminex;
    277               user = "root";
    278             };
    279           };
    280         };
    281 
    282         vno1-gdrx = {
    283           hostname = "vno1-gdrx.jakst.vpn";
    284           profiles = {
    285             system = {
    286               sshUser = "motiejus";
    287               path = self.nixosConfigurations.vno1-gdrx.pkgs.deploy-rs.lib.activate.nixos self.nixosConfigurations.vno1-gdrx;
    288               user = "root";
    289             };
    290           };
    291         };
    292 
    293         vno3-nk = {
    294           hostname = "vno3-nk.jakst.vpn";
    295           profiles = {
    296             system = {
    297               sshUser = "motiejus";
    298               path = self.nixosConfigurations.vno3-nk.pkgs.deploy-rs.lib.activate.nixos self.nixosConfigurations.vno3-nk;
    299               user = "root";
    300             };
    301           };
    302         };
    303 
    304         fra1-c = {
    305           hostname = "fra1-c.jakst.vpn";
    306           profiles = {
    307             system = {
    308               sshUser = "motiejus";
    309               path = self.nixosConfigurations.fra1-c.pkgs.deploy-rs.lib.activate.nixos self.nixosConfigurations.fra1-c;
    310               user = "root";
    311             };
    312           };
    313         };
    314 
    315         vno2-desk2 = {
    316           hostname = "vno2-desk2.jakst.vpn";
    317           profiles = {
    318             system = {
    319               sshUser = "motiejus";
    320               path = self.nixosConfigurations.vno2-desk2.pkgs.deploy-rs.lib.activate.nixos self.nixosConfigurations.vno2-desk2;
    321               user = "root";
    322             };
    323           };
    324         };
    325 
    326       };
    327       checks = builtins.mapAttrs (
    328         system: deployLib:
    329         let
    330           pkgs = import nixpkgs { inherit system; };
    331         in
    332         deployLib.deployChecks self.deploy
    333         // {
    334           pre-commit-check = inputs.pre-commit-hooks.lib.${system}.run {
    335             src = ./.;
    336             # pre-commit's nativeCheckInputs pull in dotnet-sdk, go, cargo etc.;
    337             # pytestCheckHook leaks in via `identify` propagatedBuildInputs
    338             package = pkgs.pre-commit.overridePythonAttrs {
    339               doCheck = false;
    340               doInstallCheck = false;
    341               dontUsePytestCheck = true;
    342               nativeCheckInputs = [ ];
    343               preCheck = "";
    344               pytestFlags = [ ];
    345               disabledTests = [ ];
    346             };
    347             hooks = {
    348               statix.enable = true;
    349               deadnix.enable = true;
    350               nixfmt-rfc-style.enable = true;
    351             };
    352           };
    353         }
    354       ) deploy-rs.lib;
    355     }
    356     // flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ] (
    357       system:
    358       let
    359         pkgs = import nixpkgs {
    360           inherit system;
    361           config.allowUnfree = true;
    362           overlays = baseOverlays;
    363         };
    364       in
    365       {
    366         devShells.default = pkgs.mkShellNoCC {
    367           GIT_AUTHOR_EMAIL = "motiejus@jakstys.lt";
    368           packages = [
    369             pkgs.nix-output-monitor
    370             pkgs.rage
    371             pkgs.age-plugin-yubikey
    372             agenix.packages.${system}.agenix
    373           ]
    374           ++ [
    375             (
    376               if pkgs.stdenv.isDarwin then
    377                 # deploy-rs overlay doesn't build on darwin; use nixpkgs version
    378                 (import nixpkgs { inherit system; }).deploy-rs
    379               else
    380                 pkgs.deploy-rs.deploy-rs
    381             )
    382           ];
    383           shellHook = (self.checks.${system}.pre-commit-check or { }).shellHook or "";
    384         };
    385 
    386         formatter = pkgs.nixfmt-rfc-style;
    387       }
    388     )
    389 
    390     // (
    391       let
    392         pkgs = import nixpkgs {
    393           overlays = baseOverlays;
    394           system = "x86_64-linux";
    395         };
    396       in
    397       {
    398         packages.x86_64-linux = {
    399           inherit (pkgs)
    400             weather
    401             gamja
    402             chronoctl
    403             mrescue-alpine
    404             mrescue-debian-xfce
    405             mrescue-nixos
    406             ;
    407         };
    408       }
    409     );
    410 
    411 }