Compare commits

..

1 Commits

Author SHA1 Message Date
ee40c469bf feat(ci): Add Forgejo Actions CI workflow
Set up continuous integration for nixos-configs:
- Validate flake syntax with `nix flake check --no-build`
- Display flake metadata and outputs for visibility
- Build critical NixOS configurations in parallel matrix
- Configurations tested: john-endesktop, zix790prors, nix-book, boxy

Implements bead: nixos-configs-2hq
2026-01-10 12:55:57 -08:00
2 changed files with 113 additions and 47 deletions

View File

@@ -0,0 +1,47 @@
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
flake-check:
runs-on: nix
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check flake syntax
run: nix flake check --no-build
- name: Show flake metadata
run: nix flake metadata
- name: Show flake outputs
run: nix flake show
build-configs:
runs-on: nix
needs: flake-check
strategy:
fail-fast: false
matrix:
config:
# Critical server configurations
- john-endesktop
# Desktop configurations
- zix790prors
- nix-book
# Media center
- boxy
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build ${{ matrix.config }}
run: |
nix build .#nixosConfigurations.${{ matrix.config }}.config.system.build.toplevel \
--no-link \
--print-build-logs

113
flake.nix
View File

@@ -56,75 +56,94 @@
}; };
outputs = { self, nixpkgs, nixpkgs-unstable, nixos-wsl, ... } @ inputs: let outputs = { self, nixpkgs, nixpkgs-unstable, nixos-wsl, ... } @ inputs: let
# Shared overlay function to reduce duplication across module sets
# Parameters:
# unstableOverlays: Additional overlays to apply when importing nixpkgs-unstable
mkBaseOverlay = { unstableOverlays ? [] }: (final: prev: {
unstable = import nixpkgs-unstable {
system = prev.stdenv.hostPlatform.system;
config.allowUnfree = true;
overlays = unstableOverlays;
};
custom = prev.callPackage ./packages {};
# Compatibility: bitwarden renamed to bitwarden-desktop in unstable
bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden;
});
# Shared home-manager configuration factory
# Parameters:
# sharedModules: Additional modules to include in home-manager.sharedModules
mkHomeManagerConfig = { sharedModules ? [] }: {
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.sharedModules = sharedModules ++ [
inputs.nix-doom-emacs-unstraightened.homeModule
];
home-manager.extraSpecialArgs = {
globalInputs = inputs;
};
};
nixosModules = [ nixosModules = [
./roles ./roles
] ++ [
inputs.home-manager.nixosModules.home-manager inputs.home-manager.nixosModules.home-manager
{ {
nixpkgs.overlays = [ (mkBaseOverlay {}) ]; nixpkgs.overlays = [
(final: prev: {
unstable = import nixpkgs-unstable {
system = prev.stdenv.hostPlatform.system;
config.allowUnfree = true;
};
custom = prev.callPackage ./packages {};
# Compatibility: bitwarden renamed to bitwarden-desktop in unstable
bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden;
})
];
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.sharedModules = [
inputs.plasma-manager.homeModules.plasma-manager
inputs.nix-doom-emacs-unstraightened.homeModule
];
home-manager.extraSpecialArgs = {
globalInputs = inputs;
};
} }
(mkHomeManagerConfig {
sharedModules = [ inputs.plasma-manager.homeModules.plasma-manager ];
})
]; ];
# Modules for unstable-based systems (like nix-deck) # Modules for unstable-based systems (like nix-deck)
nixosModulesUnstable = [ nixosModulesUnstable = [
./roles ./roles
] ++ [
inputs.home-manager-unstable.nixosModules.home-manager inputs.home-manager-unstable.nixosModules.home-manager
inputs.jovian.nixosModules.jovian inputs.jovian.nixosModules.jovian
{ {
nixpkgs.overlays = [ (mkBaseOverlay {}) ]; nixpkgs.overlays = [
(final: prev: {
unstable = import nixpkgs-unstable {
system = prev.stdenv.hostPlatform.system;
config.allowUnfree = true;
};
custom = prev.callPackage ./packages {};
# Compatibility: bitwarden renamed to bitwarden-desktop in unstable
bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden;
})
];
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.sharedModules = [
inputs.plasma-manager-unstable.homeModules.plasma-manager
inputs.nix-doom-emacs-unstraightened.homeModule
];
home-manager.extraSpecialArgs = {
globalInputs = inputs;
};
} }
(mkHomeManagerConfig {
sharedModules = [ inputs.plasma-manager-unstable.homeModules.plasma-manager ];
})
]; ];
darwinModules = [ darwinModules = [
./roles/darwin.nix ./roles/darwin.nix
] ++ [
inputs.home-manager.darwinModules.home-manager inputs.home-manager.darwinModules.home-manager
{ {
nixpkgs.overlays = [ nixpkgs.overlays = [
(mkBaseOverlay { (final: prev: {
# Override claude-code in unstable to use our custom GCS-based build unstable = import nixpkgs-unstable {
# (needed for corporate networks that block npm registry) system = prev.stdenv.hostPlatform.system;
unstableOverlays = [ config.allowUnfree = true;
(ufinal: uprev: { overlays = [
claude-code = uprev.callPackage ./packages/claude-code {}; # Override claude-code in unstable to use our custom GCS-based build
}) # (needed for corporate networks that block npm registry)
]; (ufinal: uprev: {
claude-code = prev.custom.claude-code or (prev.callPackage ./packages {}).claude-code;
})
];
};
custom = prev.callPackage ./packages {};
# Compatibility: bitwarden renamed to bitwarden-desktop in unstable
bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden;
}) })
]; ];
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.sharedModules = [
inputs.nix-doom-emacs-unstraightened.homeModule
];
home-manager.extraSpecialArgs = {
globalInputs = inputs;
};
} }
(mkHomeManagerConfig { sharedModules = []; })
]; ];
in { in {