Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add nix flake #132

Merged
merged 10 commits into from
Apr 17, 2024
Merged
57 changes: 57 additions & 0 deletions .github/workflows/nix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Check nix packages
on:
pull_request:
paths:
- "./*.nix"
- ".github/workflows/nix.yml"
- "assets/**"
- "customize/**"
push:
branches: [master]
paths:
- "./*.nix"
- ".github/workflows/nix.yml"
- "assets/**"
- "customize/**"
jobs:
flake:
name: Check flake
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check Nix flake inputs
uses: DeterminateSystems/flake-checker-action@v5
with:
send-statistics: false
fail-mode: true
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@v9
- name: Check repository
run: nix flake check
matrix:
name: Generate build matrix
runs-on: ubuntu-latest
outputs:
themes: ${{ steps.generate-matrix.outputs.themes }}
steps:
- uses: actions/checkout@v4
- name: Generate matrix
id: generate-matrix
run: |
THEMES=$(ls assets/backgrounds/ | sed 's/\.png$//g' | jq --raw-input | jq --slurp -c)
echo "themes=$THEMES" >> $GITHUB_OUTPUT
build:
name: Check nix build for theme ${{ matrix.theme }}
runs-on: ubuntu-latest
needs:
- matrix
strategy:
matrix:
theme: ${{ fromJSON(needs.matrix.outputs.themes) }}
steps:
- uses: actions/checkout@v4
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@v9
- name: Build package
run: nix build .#${{ matrix.theme }}-grub-theme

4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.envrc
.direnv
.vscode
result
Binary file added assets/splash_image.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
28 changes: 28 additions & 0 deletions build/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{ stdenvNoCC, lib, theme }:
let
themes = builtins.map (theme: (builtins.head (lib.strings.splitString "." theme))) (builtins.attrNames (builtins.readDir ./../assets/backgrounds));
in
assert builtins.any (x: x == theme) themes;

stdenvNoCC.mkDerivation {
name = "distro-grub-themes";
src = ./../.;

installPhase = ''
mkdir -p $out
cp ./assets/backgrounds/${theme}.png $out/background.png
cp ./assets/splash_image.jpg $out/splash_image.jpg
cp -r ./assets/icons $out
cp -r ./assets/fonts/. $out
cp -r ./assets/menu/. $out
cp -r ./assets/theme.txt $out
'';

meta = with lib; {
homepage = "https://github.com/AdisonCavani/distro-grub-themes";
description = "A pack of GRUB2 themes for each Linux distribution";
license = licenses.gpl3;
maintainers = with maintainers; [ zakuciael ];
platforms = platforms.linux;
};
}
28 changes: 28 additions & 0 deletions build/module.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{ pks, lib, config, ... }:
with lib;
let
cfg = config.distro-grub-themes;
themes = builtins.map (theme: (builtins.head (lib.strings.splitString "." theme))) (builtins.attrNames (builtins.readDir ./../assets/backgrounds));
in
{
options.distro-grub-themes = {
enable = mkEnableOption "Enable Distro Grub Theme";
theme = mkOption {
type = types.enum themes;
default = "nixos";
example = "arch-linux";
description = ''
Selected theme name.
IMPORTANT! Theme name must be the same as in assert/backgrounds directory without the extension
'';
};
};

config = mkIf (cfg.enable)
{
boot.loader.grub = {
theme = pkgs.callPackage ./default.nix { theme = cfg.theme; };
splashImage = ./assets/splash_image.jpg;
};
};
}
78 changes: 78 additions & 0 deletions docs/Installation.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,84 @@ sudo eopkg install grub-customizer
To revert back to the orignal KDE Neon theme, open GRUB Customizer, and in the Appearance settings tab, change the theme dropdown back to breeze.
</Callout>

## Installation via Nix Flakes
### Prerequisites
- Nix 2.4 or later
- Experimental features `nix-command` and `flakes` enabled.
- You can achive that by setting the following options and rebuilding your system.

```nix:configuration.nix
nix = {
package = pkgs.nixFlakes;
extraOptions = ''
experimental-features = nix-command flakes
'';
};
```

### NixOS module
To use this theme as a NixOS module, a bare-minimum configuration would be as follows:
```nix:flake.nix
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
distro-grub-themes.url = "github:AdisonCavani/distro-grub-themes";
};
outputs = { self, nixpkgs, ... }@inputs: {
nixosConfigurations."default" = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = [
./configuration.nix
inputs.distro-grub-themes.nixosModules.${system}.default
];
};
};
}
```

```nix:configuration.nix
{ config, pkgs, lib, ... }: {
distro-grub-themes = {
enable = true;
theme = "<theme_name>";
};
}
```

### Standalone setup
To use this theme in a standalone setup, a bare-minimum configuration would be as follows:
```nix:flake.nix
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
distro-grub-themes.url = "github:AdisonCavani/distro-grub-themes";
};
outputs = { self, nixpkgs, ... }@inputs: {
nixosConfigurations."default" = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";

specialArgs = {
# Pass system and inputs to the configuration.nix file
inherit system inputs;
};

modules = [
./configuration.nix
];
};
};
}
```
```nix:configuration.nix
{ config, pkgs, lib, inputs, system, ... }: {

boot.loader.grub = rec {
theme = inputs.distro-grub-themes.packages.${system}.<theme_name>-grub-theme;
splashImage = "${theme}/splash_image.jpg";
};
}
```

## Manual Installation

In order to clone the repository from GitHub, you have to install Git, via the `git` package.
Expand Down
61 changes: 61 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 40 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
description = "A pack of GRUB2 themes for each Linux distribution";

inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};

outputs =
{ self, nixpkgs, flake-utils }:
let
systems = [ "aarch64-linux" "i686-linux" "x86_64-linux" ];
in
flake-utils.lib.eachSystem systems (
system:
let
pkgs = import nixpkgs { inherit system; };
themeNames = builtins.attrNames (builtins.readDir ./assets/backgrounds);
themePackages = builtins.listToAttrs (builtins.map
(theme:
let name = (builtins.head (pkgs.lib.strings.splitString "." theme)); in {
name = name + "-grub-theme";
value = pkgs.callPackage ./build/default.nix { theme = name; };
})
themeNames);
in
{
packages = {
default = pkgs.callPackage ./build/default.nix { theme = "nixos"; };
} // themePackages;

devShells.default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [ nixd nixpkgs-fmt act jq ];
};

nixosModules.default = ./build/module.nix;
}
);
}