Merge pull request #1073 from mochouaaaaa/main

feat(nix): add users-templates config
This commit is contained in:
Lysec
2025-12-19 17:29:13 +01:00
committed by GitHub
+67 -18
View File
@@ -3,17 +3,22 @@
lib,
pkgs,
...
}: let
}:
let
cfg = config.programs.noctalia-shell;
jsonFormat = pkgs.formats.json {};
generateJson = name: value:
jsonFormat = pkgs.formats.json { };
tomlFormat = pkgs.formats.toml { };
generateJson =
name: value:
if lib.isString value then
pkgs.writeText "noctalia-${name}.json" value
else if builtins.isPath value || lib.isStorePath value then
value
else
jsonFormat.generate "noctalia-${name}.json" value;
in {
in
{
options.programs.noctalia-shell = {
enable = lib.mkEnableOption "Noctalia shell configuration";
@@ -25,13 +30,14 @@ in {
};
settings = lib.mkOption {
type = with lib.types;
type =
with lib.types;
oneOf [
jsonFormat.type
str
path
];
default = {};
default = { };
example = lib.literalExpression ''
{
bar = {
@@ -56,13 +62,14 @@ in {
};
colors = lib.mkOption {
type = with lib.types;
type =
with lib.types;
oneOf [
jsonFormat.type
str
path
];
default = {};
default = { };
example = lib.literalExpression ''
{
mError = "#dddddd";
@@ -87,6 +94,36 @@ in {
'';
};
user-templates = lib.mkOption {
default = { };
type =
with lib.types;
oneOf [
tomlFormat.type
str
path
];
example = lib.literalExpression ''
{
templates = {
neovim = {
inputPath = "~/.config/matugen/templates/template.lua";
outputPath = "~/.config/nvim/generated.lua";
postHook = "pkill -SIGUSR1 nvim";
};
};
}
'';
description = ''
Template definitions for Matugen.
This option accepts:
- a Nix attrset (converted to TOML automatically)
- a string containing raw TOML
- a path to an existing TOML file
'';
};
app2unit.package = lib.mkOption {
type = lib.types.package;
default = pkgs.app2unit;
@@ -96,10 +133,11 @@ in {
};
};
config = let
restart = "${pkgs.systemd}/bin/systemctl --user try-restart noctalia-shell.service 2>/dev/null || true";
useApp2Unit = cfg.settings.appLauncher.useApp2Unit or false;
in
config =
let
restart = "${pkgs.systemd}/bin/systemctl --user try-restart noctalia-shell.service 2>/dev/null || true";
useApp2Unit = cfg.settings.appLauncher.useApp2Unit or false;
in
lib.mkIf cfg.enable {
systemd.user.services.noctalia-shell = lib.mkIf cfg.systemd.enable {
Unit = {
@@ -108,8 +146,11 @@ in {
PartOf = [ config.wayland.systemd.target ];
After = [ config.wayland.systemd.target ];
X-Restart-Triggers =
lib.optional (cfg.settings != {}) config.xdg.configFile."noctalia/settings.json".source
++ lib.optional (cfg.colors != {}) config.xdg.configFile."noctalia/colors.json".source;
lib.optional (cfg.settings != { }) config.xdg.configFile."noctalia/settings.json".source
++ lib.optional (cfg.colors != { }) config.xdg.configFile."noctalia/colors.json".source
++ lib.optional (
cfg.user-templates != { }
) config.xdg.configFile."noctalia/user-templates.toml".source;
};
Service = {
@@ -124,18 +165,26 @@ in {
};
home.packages =
lib.optional useApp2Unit cfg.app2unit.package
++ lib.optional (cfg.package != null) cfg.package;
lib.optional useApp2Unit cfg.app2unit.package ++ lib.optional (cfg.package != null) cfg.package;
xdg.configFile = {
"noctalia/settings.json" = lib.mkIf (cfg.settings != {}) {
"noctalia/settings.json" = lib.mkIf (cfg.settings != { }) {
onChange = lib.mkIf (!cfg.systemd.enable) restart;
source = generateJson "settings" cfg.settings;
};
"noctalia/colors.json" = lib.mkIf (cfg.colors != {}) {
"noctalia/colors.json" = lib.mkIf (cfg.colors != { }) {
onChange = lib.mkIf (!cfg.systemd.enable) restart;
source = generateJson "colors" cfg.colors;
};
"noctalia/user-templates.toml" = lib.mkIf (cfg.user-templates != { }) {
source =
if lib.isString cfg.user-templates then
pkgs.writeText "noctalia-user-templates.toml" cfg.user-templates
else if builtins.isPath cfg.user-templates || lib.isStorePath cfg.user-templates then
cfg.user-templates
else
tomlFormat.generate "noctalia-user-templates.toml" cfg.user-templates;
};
};
assertions = [