mirror of
https://github.com/nix-community/home-manager.git
synced 2026-01-11 01:19:32 +08:00
Compare commits
31 Commits
9afe77a70b
...
cd6e96d56e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cd6e96d56e | ||
|
|
b1b1c68033 | ||
|
|
081234b704 | ||
|
|
2be878259a | ||
|
|
fa6de26b4d | ||
|
|
9fff37e6ff | ||
|
|
a2cc7b0bab | ||
|
|
37158e5267 | ||
|
|
cd74467526 | ||
|
|
72476602b9 | ||
|
|
e926e27968 | ||
|
|
db116ceb76 | ||
|
|
f7b2bdf042 | ||
|
|
a1a11393d9 | ||
|
|
802ce0a7b1 | ||
|
|
e69fbc243a | ||
|
|
ebab435f3e | ||
|
|
bacad23b8c | ||
|
|
6067be4770 | ||
|
|
12a723df97 | ||
|
|
40deed4ffe | ||
|
|
9500721e96 | ||
|
|
db105fadc4 | ||
|
|
609846bfd2 | ||
|
|
2db6bcc7ca | ||
|
|
a3ac4bb1f8 | ||
|
|
47db0fde35 | ||
|
|
3351348827 | ||
|
|
7688293f06 | ||
|
|
92394f9dea | ||
|
|
fb6a8404ee |
5
.github/workflows/validate-maintainers.yml
vendored
5
.github/workflows/validate-maintainers.yml
vendored
@@ -1,7 +1,10 @@
|
||||
name: Validate maintainers.nix
|
||||
on:
|
||||
pull_request:
|
||||
paths: ["modules/lib/maintainers.nix"]
|
||||
paths:
|
||||
- "modules/lib/maintainers.nix"
|
||||
- "flake.lock"
|
||||
- "all-maintainers.nix"
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
run_tests:
|
||||
|
||||
2
LICENSE
2
LICENSE
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017-2025 Home Manager contributors
|
||||
Copyright (c) 2017-2026 Home Manager contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
2
Makefile
2
Makefile
@@ -17,4 +17,4 @@ test-install:
|
||||
HOME=$(shell mktemp -d) NIX_PATH=${NIX_PATH} nix-shell . -A install
|
||||
|
||||
format:
|
||||
nix-shell -p treefmt nixfmt deadnix keep-sorted --run "treefmt --config-file ./treefmt.toml"
|
||||
nix-shell -p treefmt nixfmt deadnix keep-sorted nixf-diagnose --run "treefmt --config-file ./treefmt.toml"
|
||||
|
||||
@@ -19,6 +19,11 @@
|
||||
email = "da157@voidq.com";
|
||||
github = "0xda157";
|
||||
githubId = 153149335;
|
||||
keys = [
|
||||
{
|
||||
fingerprint = "5A66 FF95 36DE B501 DDD2 1647 B7AC 1B10 365D 45FF";
|
||||
}
|
||||
];
|
||||
matrix = "@da157:catgirl.cloud";
|
||||
name = "0xda157";
|
||||
source = "nixpkgs";
|
||||
@@ -65,14 +70,6 @@
|
||||
name = "Alex";
|
||||
source = "home-manager";
|
||||
};
|
||||
AndersonTorres = {
|
||||
email = "torres.anderson.85@protonmail.com";
|
||||
github = "AndersonTorres";
|
||||
githubId = 5954806;
|
||||
matrix = "@anderson_torres:matrix.org";
|
||||
name = "Anderson Torres";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
AndreasMager = {
|
||||
email = "andreas@mager.eu";
|
||||
github = "AndreasMager";
|
||||
@@ -1760,7 +1757,7 @@
|
||||
github = "nickthegroot";
|
||||
githubId = 1966472;
|
||||
name = "Nick DeGroot";
|
||||
source = "home-manager";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
nikp123 = {
|
||||
email = "nikp123@users.noreply.github.com";
|
||||
@@ -2012,7 +2009,7 @@
|
||||
github = "rrvsh";
|
||||
githubId = 20300874;
|
||||
name = "Mohammad Rafiq";
|
||||
source = "home-manager";
|
||||
source = "nixpkgs";
|
||||
};
|
||||
rszamszur = {
|
||||
email = "radoslawszamszur@gmail.com";
|
||||
|
||||
@@ -110,8 +110,7 @@ let
|
||||
in
|
||||
pkgs.buildPackages.nixosOptionsDoc (
|
||||
{
|
||||
options =
|
||||
if includeModuleSystemOptions then options else builtins.removeAttrs options [ "_module" ];
|
||||
options = if includeModuleSystemOptions then options else removeAttrs options [ "_module" ];
|
||||
transformOptions =
|
||||
opt:
|
||||
opt
|
||||
@@ -133,7 +132,7 @@ let
|
||||
) opt.declarations;
|
||||
};
|
||||
}
|
||||
// builtins.removeAttrs args [
|
||||
// removeAttrs args [
|
||||
"modules"
|
||||
"includeModuleSystemOptions"
|
||||
]
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
nixfmt
|
||||
deadnix
|
||||
keep-sorted
|
||||
nixf-diagnose
|
||||
];
|
||||
settings = pkgs.lib.importTOML ./treefmt.toml;
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ let
|
||||
modules = [ configuration ] ++ hmModules;
|
||||
class = "homeManager";
|
||||
specialArgs = {
|
||||
modulesPath = builtins.toString ./.;
|
||||
modulesPath = toString ./.;
|
||||
}
|
||||
// extraSpecialArgs;
|
||||
};
|
||||
|
||||
@@ -192,7 +192,7 @@ in
|
||||
++ lib.optionals (cfg.quickPhraseFiles != { }) [
|
||||
(pkgs.linkFarm "quickPhraseFiles" (
|
||||
lib.mapAttrs' (
|
||||
name: value: lib.nameValuePair ("share/fcitx5/data/quickphrase.d/${name}.mb") value
|
||||
name: value: lib.nameValuePair "share/fcitx5/data/quickphrase.d/${name}.mb" value
|
||||
) cfg.quickPhraseFiles
|
||||
))
|
||||
];
|
||||
|
||||
@@ -13,12 +13,9 @@ let
|
||||
mergeDefinitions
|
||||
;
|
||||
inherit (builtins)
|
||||
map
|
||||
filter
|
||||
length
|
||||
deepSeq
|
||||
throw
|
||||
toString
|
||||
concatLists
|
||||
;
|
||||
inherit (lib.options) showDefs;
|
||||
|
||||
@@ -423,12 +423,6 @@
|
||||
github = "natecox";
|
||||
githubId = 2782695;
|
||||
};
|
||||
nickthegroot = {
|
||||
name = "Nick DeGroot";
|
||||
email = "nick@nickthegroot.com";
|
||||
github = "nickthegroot";
|
||||
githubId = 1966472;
|
||||
};
|
||||
nikp123 = {
|
||||
name = "nikp123";
|
||||
email = "nikp123@users.noreply.github.com";
|
||||
@@ -507,12 +501,6 @@
|
||||
github = "Rosuavio";
|
||||
githubId = 7164552;
|
||||
};
|
||||
rrvsh = {
|
||||
name = "Mohammad Rafiq";
|
||||
email = "rafiq@rrv.sh";
|
||||
github = "rrvsh";
|
||||
githubId = 20300874;
|
||||
};
|
||||
rszamszur = {
|
||||
name = "Radosław Szamszur";
|
||||
email = "radoslawszamszur@gmail.com";
|
||||
|
||||
@@ -278,7 +278,7 @@ in
|
||||
else if builtins.isString value then
|
||||
"<const>${value}</const>"
|
||||
else
|
||||
throw ("expected bool or string but got ${builtins.typeOf value}: ${toString value}");
|
||||
throw "expected bool or string but got ${builtins.typeOf value}: ${toString value}";
|
||||
in
|
||||
''
|
||||
<match target="font">
|
||||
@@ -338,7 +338,7 @@ in
|
||||
|
||||
xdg.configFile = lib.mapAttrs' (
|
||||
name: config:
|
||||
lib.nameValuePair "fontconfig/conf.d/${builtins.toString config.priority}-hm-${config.label}.conf" {
|
||||
lib.nameValuePair "fontconfig/conf.d/${toString config.priority}-hm-${config.label}.conf" {
|
||||
inherit (config) enable text;
|
||||
source = lib.mkIf (config.source != null) config.source;
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ let
|
||||
fileList ++ subdirFiles;
|
||||
|
||||
newsFiles = collectNixFiles ./news;
|
||||
newsEntries = builtins.map (
|
||||
newsEntries = map (
|
||||
newsFile:
|
||||
let
|
||||
imported = import newsFile;
|
||||
|
||||
@@ -47,9 +47,9 @@ in
|
||||
desktop: terminals:
|
||||
# Map desktop name such as GNOME to `.config/gnome-xdg-terminals.list`,
|
||||
# default to `.config/xdg-terminals.list`.
|
||||
lib.nameValuePair (
|
||||
"${if desktop == "default" then "" else "${lib.toLower desktop}-"}xdg-terminals.list"
|
||||
) { text = lib.concatLines terminals; }
|
||||
lib.nameValuePair "${
|
||||
if desktop == "default" then "" else "${lib.toLower desktop}-"
|
||||
}xdg-terminals.list" { text = lib.concatLines terminals; }
|
||||
) cfg.settings;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ in
|
||||
};
|
||||
|
||||
stylesets = mkOption {
|
||||
type = with types; attrsOf (sectionsOrLines);
|
||||
type = with types; attrsOf sectionsOrLines;
|
||||
default = { };
|
||||
example = literalExpression ''
|
||||
{ default = { ui = { "tab.selected.reverse" = "toggle"; }; }; };
|
||||
|
||||
@@ -6,9 +6,7 @@
|
||||
}:
|
||||
let
|
||||
inherit (builtins)
|
||||
map
|
||||
toJSON
|
||||
toString
|
||||
substring
|
||||
stringLength
|
||||
;
|
||||
|
||||
@@ -281,7 +281,7 @@ in
|
||||
) supportedBrowsers;
|
||||
|
||||
config = lib.mkMerge (
|
||||
builtins.map (browser: browserConfig browser config.programs.${browser}) (
|
||||
map (browser: browserConfig browser config.programs.${browser}) (
|
||||
builtins.attrNames supportedBrowsers
|
||||
)
|
||||
);
|
||||
|
||||
@@ -129,7 +129,7 @@ in
|
||||
enable = lib.mkDefault true;
|
||||
iniContent =
|
||||
let
|
||||
difftCommand = "${lib.getExe cfg.package} ${lib.cli.toGNUCommandLineShell { } cfg.options}";
|
||||
difftCommand = "${lib.getExe cfg.package} ${lib.cli.toCommandLineShellGNU { } cfg.options}";
|
||||
in
|
||||
mkMerge [
|
||||
{
|
||||
|
||||
@@ -16,8 +16,7 @@ let
|
||||
|
||||
generateConfig = lib.generators.toKeyValue {
|
||||
mkKeyValue =
|
||||
name: value:
|
||||
if lib.isString value then ''${name}="${value}"'' else "${name}=${builtins.toString value}";
|
||||
name: value: if lib.isString value then ''${name}="${value}"'' else "${name}=${toString value}";
|
||||
};
|
||||
|
||||
iniFormat = pkgs.formats.ini { listsAsDuplicateKeys = true; };
|
||||
|
||||
@@ -103,7 +103,7 @@ in
|
||||
{
|
||||
name = path;
|
||||
value = {
|
||||
source = jsonFormat.generate "config.json" (ctx);
|
||||
source = jsonFormat.generate "config.json" ctx;
|
||||
};
|
||||
}
|
||||
) cfg.contexts;
|
||||
|
||||
@@ -471,7 +471,7 @@ in
|
||||
|
||||
order = mkOption {
|
||||
type = with types; uniq (listOf str);
|
||||
apply = builtins.map migrateEngineNameToIdV7;
|
||||
apply = map migrateEngineNameToIdV7;
|
||||
default = [ ];
|
||||
example = [
|
||||
"ddg"
|
||||
|
||||
@@ -627,7 +627,7 @@ in
|
||||
package
|
||||
]
|
||||
++ lib.filter (p: p != null) (
|
||||
builtins.map (outName: package.${outName} or null) config.home.extraOutputsToInstall
|
||||
map (outName: package.${outName} or null) config.home.extraOutputsToInstall
|
||||
);
|
||||
nativeBuildInputs = [ pkgs.python3 ];
|
||||
buildInputs = [ cfg.package ];
|
||||
|
||||
@@ -11,7 +11,7 @@ let
|
||||
tomlFormat = pkgs.formats.toml { };
|
||||
in
|
||||
{
|
||||
meta.maintainers = [ lib.hm.maintainers.rrvsh ];
|
||||
meta.maintainers = [ lib.maintainers.rrvsh ];
|
||||
|
||||
options.programs.gemini-cli = {
|
||||
enable = lib.mkEnableOption "gemini-cli";
|
||||
|
||||
@@ -204,7 +204,7 @@ in
|
||||
|
||||
xdg.dataFile."gh/extensions" = mkIf (cfg.extensions != [ ]) {
|
||||
source = pkgs.linkFarm "gh-extensions" (
|
||||
builtins.map (p: {
|
||||
map (p: {
|
||||
name = p.pname;
|
||||
path = "${p}/bin";
|
||||
}) cfg.extensions
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
let
|
||||
tomlFormat = pkgs.formats.toml { };
|
||||
cfg = config.programs.gurk-rs;
|
||||
configDir =
|
||||
if pkgs.stdenv.hostPlatform.isDarwin then "Library/Application Support" else config.xdg.configHome;
|
||||
in
|
||||
{
|
||||
meta.maintainers = [ lib.maintainers.da157 ];
|
||||
@@ -46,9 +48,8 @@ in
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
|
||||
|
||||
home.file."${
|
||||
if pkgs.stdenv.hostPlatform.isDarwin then "Library/Application Support" else config.xdg.configHome
|
||||
}/gurk/gurk.toml".source =
|
||||
lib.mkIf (cfg.settings != { }) (tomlFormat.generate "gurk-config" cfg.settings);
|
||||
home.file."${configDir}/gurk/gurk.toml" = lib.mkIf (cfg.settings != { }) {
|
||||
source = tomlFormat.generate "gurk-config" cfg.settings;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ let
|
||||
iniFormat = pkgs.formats.ini { };
|
||||
in
|
||||
{
|
||||
meta.maintainers = with lib.maintainers; [ ];
|
||||
meta.maintainers = [ ];
|
||||
|
||||
options.programs.havoc = {
|
||||
enable = lib.mkEnableOption "Havoc terminal";
|
||||
|
||||
@@ -70,7 +70,7 @@ in
|
||||
"mako"
|
||||
];
|
||||
in
|
||||
builtins.map (name: {
|
||||
map (name: {
|
||||
assertion = !config.services.${name}.enable;
|
||||
message = ''
|
||||
Only one notification daemon can be enabled at once. You have enabled
|
||||
|
||||
@@ -139,7 +139,7 @@ in
|
||||
in
|
||||
lib.hm.dag.entryAfter [ "linkGeneration" ] ''
|
||||
# Ensure that settings.json exists.
|
||||
mkdir -p ${builtins.dirOf configPath}
|
||||
mkdir -p ${dirOf configPath}
|
||||
touch ${configPath}
|
||||
# Config has to be written to temporary variable because jq cannot edit files in place.
|
||||
config="$(jq -s '.[0] + .[1]' ${configPath} ${newConfig})"
|
||||
|
||||
@@ -14,7 +14,7 @@ let
|
||||
renderSettings =
|
||||
with lib.generators;
|
||||
toINI {
|
||||
mkKeyValue = mkKeyValueDefault rec {
|
||||
mkKeyValue = mkKeyValueDefault {
|
||||
mkValueString =
|
||||
v:
|
||||
if lib.isList v then
|
||||
@@ -139,7 +139,7 @@ in
|
||||
let
|
||||
makePath =
|
||||
baseDir: subDir:
|
||||
builtins.toString (
|
||||
toString (
|
||||
/.
|
||||
+ lib.concatStringsSep "/" [
|
||||
baseDir
|
||||
|
||||
@@ -341,16 +341,13 @@ in
|
||||
# See https://sw.kovidgoyal.net/kitty/conf.html
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
}
|
||||
// lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux {
|
||||
onChange = ''
|
||||
${pkgs.procps}/bin/pkill -USR1 -u $USER kitty || true
|
||||
'';
|
||||
}
|
||||
// lib.optionalAttrs pkgs.stdenv.hostPlatform.isDarwin {
|
||||
onChange = ''
|
||||
/usr/bin/pkill -USR1 -u $USER kitty || true
|
||||
'';
|
||||
onChange =
|
||||
let
|
||||
prefix = if pkgs.stdenv.hostPlatform.isDarwin then "/usr" else pkgs.procps;
|
||||
in
|
||||
''
|
||||
${prefix}/bin/pkill -USR1 -u $USER kitty || true
|
||||
'';
|
||||
};
|
||||
|
||||
xdg.configFile."kitty/quick-access-terminal.conf" = mkIf (cfg.quickAccessTerminalConfig != { }) {
|
||||
|
||||
@@ -9,7 +9,6 @@ let
|
||||
|
||||
cfg = config.programs.kubecolor;
|
||||
yamlFormat = pkgs.formats.yaml { };
|
||||
inherit (pkgs.stdenv.hostPlatform) isDarwin;
|
||||
|
||||
in
|
||||
{
|
||||
@@ -50,18 +49,20 @@ in
|
||||
|
||||
config =
|
||||
let
|
||||
preferXdgDirectories = config.home.preferXdgDirectories && (!isDarwin || config.xdg.enable);
|
||||
preferXdgDirectories =
|
||||
config.home.preferXdgDirectories && (!pkgs.stdenv.hostPlatform.isDarwin || config.xdg.enable);
|
||||
configDir =
|
||||
if preferXdgDirectories then
|
||||
"${config.xdg.configHome}/kube"
|
||||
else if pkgs.stdenv.hostPlatform.isDarwin then
|
||||
"Library/Application Support/kube"
|
||||
else
|
||||
".kube";
|
||||
|
||||
# https://github.com/kubecolor/kubecolor/pull/145
|
||||
configPathSuffix =
|
||||
if
|
||||
cfg.package.pname == "kubecolor"
|
||||
&& lib.strings.toInt (lib.versions.major cfg.package.version) == 0
|
||||
&& lib.strings.toInt (lib.versions.minor cfg.package.version) < 4
|
||||
then
|
||||
"kube/"
|
||||
else
|
||||
"kube/color.yaml";
|
||||
configPathSuffix = lib.optionalString (
|
||||
cfg.package.pname == "kubecolor" && lib.versionOlder (lib.getVersion cfg.package) "0.4"
|
||||
) "color.yaml";
|
||||
|
||||
in
|
||||
mkIf cfg.enable {
|
||||
@@ -73,31 +74,10 @@ in
|
||||
|
||||
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
|
||||
|
||||
home.sessionVariables =
|
||||
if preferXdgDirectories then
|
||||
{
|
||||
KUBECOLOR_CONFIG = "${config.xdg.configHome}/${configPathSuffix}";
|
||||
}
|
||||
else if isDarwin then
|
||||
{
|
||||
KUBECOLOR_CONFIG = "${config.home.homeDirectory}/Library/Application Support/${configPathSuffix}";
|
||||
}
|
||||
else
|
||||
{ };
|
||||
home.sessionVariables.KUBECOLOR_CONFIG = "${configDir}/${configPathSuffix}";
|
||||
|
||||
xdg.configFile = mkIf preferXdgDirectories {
|
||||
"kube/color.yaml" = mkIf (cfg.settings != { }) {
|
||||
source = yamlFormat.generate "kubecolor-settings" cfg.settings;
|
||||
};
|
||||
};
|
||||
|
||||
home.file = mkIf (!preferXdgDirectories) {
|
||||
"Library/Application Support/kube/color.yaml" = mkIf (isDarwin && cfg.settings != { }) {
|
||||
source = yamlFormat.generate "kubecolor-settings" cfg.settings;
|
||||
};
|
||||
".kube/color.yaml" = mkIf (!isDarwin && cfg.settings != { }) {
|
||||
source = yamlFormat.generate "kubecolor-settings" cfg.settings;
|
||||
};
|
||||
home.file."${configDir}/color.yaml" = mkIf (cfg.settings != { }) {
|
||||
source = yamlFormat.generate "kubecolor-settings" cfg.settings;
|
||||
};
|
||||
|
||||
home.shellAliases = lib.mkIf (cfg.enableAlias && (cfg.package != null)) {
|
||||
|
||||
@@ -201,7 +201,7 @@ let
|
||||
plugins:
|
||||
pkgs.linkFarm "lapce-plugins" (
|
||||
builtins.listToAttrs (
|
||||
builtins.map (
|
||||
map (
|
||||
{
|
||||
author,
|
||||
name,
|
||||
|
||||
@@ -11,7 +11,11 @@ let
|
||||
|
||||
yamlFormat = pkgs.formats.yaml { };
|
||||
|
||||
inherit (pkgs.stdenv.hostPlatform) isDarwin;
|
||||
configDir =
|
||||
if pkgs.stdenv.hostPlatform.isDarwin && !config.xdg.enable then
|
||||
"Library/Application Support/jesseduffield"
|
||||
else
|
||||
config.xdg.configHome;
|
||||
|
||||
in
|
||||
{
|
||||
@@ -51,16 +55,8 @@ in
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
|
||||
|
||||
home.file."Library/Application Support/jesseduffield/lazydocker/config.yml" =
|
||||
lib.mkIf (cfg.settings != { } && (isDarwin && !config.xdg.enable))
|
||||
{
|
||||
source = yamlFormat.generate "lazydocker-config" cfg.settings;
|
||||
};
|
||||
|
||||
xdg.configFile."lazydocker/config.yml" =
|
||||
lib.mkIf (cfg.settings != { } && !(isDarwin && !config.xdg.enable))
|
||||
{
|
||||
source = yamlFormat.generate "lazydocker-config" cfg.settings;
|
||||
};
|
||||
home.file."${configDir}/lazydocker/config.yml" = lib.mkIf (cfg.settings != { }) {
|
||||
source = yamlFormat.generate "lazydocker-config" cfg.settings;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -11,8 +11,11 @@ let
|
||||
|
||||
yamlFormat = pkgs.formats.yaml { };
|
||||
|
||||
inherit (pkgs.stdenv.hostPlatform) isDarwin;
|
||||
|
||||
configDir =
|
||||
if pkgs.stdenv.hostPlatform.isDarwin && !config.xdg.enable then
|
||||
"Library/Application Support"
|
||||
else
|
||||
config.xdg.configHome;
|
||||
in
|
||||
{
|
||||
meta.maintainers = [
|
||||
@@ -71,17 +74,10 @@ in
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = mkIf (cfg.package != null) [ cfg.package ];
|
||||
|
||||
home.file."Library/Application Support/lazygit/config.yml" =
|
||||
mkIf (cfg.settings != { } && (isDarwin && !config.xdg.enable))
|
||||
{
|
||||
source = yamlFormat.generate "lazygit-config" cfg.settings;
|
||||
};
|
||||
|
||||
xdg.configFile."lazygit/config.yml" =
|
||||
mkIf (cfg.settings != { } && !(isDarwin && !config.xdg.enable))
|
||||
{
|
||||
source = yamlFormat.generate "lazygit-config" cfg.settings;
|
||||
};
|
||||
home.file."${configDir}/lazygit/config.yml" = {
|
||||
enable = cfg.settings != { };
|
||||
source = yamlFormat.generate "lazygit-config" cfg.settings;
|
||||
};
|
||||
|
||||
programs =
|
||||
let
|
||||
|
||||
@@ -45,7 +45,7 @@ in
|
||||
];
|
||||
attrs = attrsOf (either scalar (listOf scalar));
|
||||
in
|
||||
coercedTo attrs (lib.cli.toGNUCommandLine { }) (listOf str);
|
||||
coercedTo attrs (lib.cli.toCommandLineGNU { }) (listOf str);
|
||||
default = [ ];
|
||||
description = "Options to be set via {env}`$LESS`.";
|
||||
example = {
|
||||
|
||||
@@ -82,7 +82,7 @@ in
|
||||
package = lib.mkPackageOption pkgs "meli" { };
|
||||
|
||||
includes = mkOption {
|
||||
type = with types; listOf (str);
|
||||
type = with types; listOf str;
|
||||
description = "Paths of the various meli configuration files to include.";
|
||||
default = [ ];
|
||||
};
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
let
|
||||
cfg = config.programs.mullvad-vpn;
|
||||
jsonFormat = pkgs.formats.json { };
|
||||
configDir =
|
||||
if pkgs.stdenv.hostPlatform.isDarwin then "Library/Application Support" else config.xdg.configHome;
|
||||
in
|
||||
{
|
||||
meta.maintainers = [ lib.maintainers.da157 ];
|
||||
@@ -42,11 +44,8 @@ in
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
|
||||
|
||||
home.file."${
|
||||
if pkgs.stdenv.hostPlatform.isDarwin then "Library/Application Support" else config.xdg.configHome
|
||||
}/Mullvad VPN/gui_settings.json" =
|
||||
lib.mkIf (cfg.settings != { }) {
|
||||
source = jsonFormat.generate "mullvad-gui-settings" cfg.settings;
|
||||
};
|
||||
home.file."${configDir}/Mullvad VPN/gui_settings.json" = lib.mkIf (cfg.settings != { }) {
|
||||
source = jsonFormat.generate "mullvad-gui-settings" cfg.settings;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ let
|
||||
|
||||
renderSettings = settings: lib.concatStringsSep ";" (lib.mapAttrsToList renderSetting settings);
|
||||
|
||||
pluginModule = types.submodule ({
|
||||
pluginModule = types.submodule {
|
||||
options = {
|
||||
src = mkOption {
|
||||
type = with types; nullOr path;
|
||||
@@ -46,7 +46,7 @@ let
|
||||
'';
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
in
|
||||
{
|
||||
meta.maintainers = with lib.maintainers; [ thiagokokada ];
|
||||
|
||||
@@ -254,7 +254,7 @@ in
|
||||
cssSnippets =
|
||||
let
|
||||
checkCssPath = path: lib.filesystem.pathIsRegularFile path && lib.strings.hasSuffix ".css" path;
|
||||
toCssName = path: lib.strings.removeSuffix ".css" (builtins.baseNameOf path);
|
||||
toCssName = path: lib.strings.removeSuffix ".css" (baseNameOf path);
|
||||
cssSnippetsOptions =
|
||||
{ config, ... }:
|
||||
{
|
||||
@@ -423,7 +423,7 @@ in
|
||||
source = (pkgs.formats.json { }).generate "appearance.json" (
|
||||
vault.settings.appearance
|
||||
// {
|
||||
enabledCssSnippets = builtins.map (snippet: snippet.name) enabledCssSnippets;
|
||||
enabledCssSnippets = map (snippet: snippet.name) enabledCssSnippets;
|
||||
}
|
||||
// lib.attrsets.optionalAttrs (activeTheme != null) {
|
||||
cssTheme = getManifest activeTheme;
|
||||
@@ -438,14 +438,14 @@ in
|
||||
{
|
||||
name = "${vault.target}/.obsidian/core-plugins.json";
|
||||
value.source = (pkgs.formats.json { }).generate "core-plugins.json" (
|
||||
builtins.map (plugin: plugin.name) vault.settings.corePlugins
|
||||
map (plugin: plugin.name) vault.settings.corePlugins
|
||||
);
|
||||
}
|
||||
{
|
||||
name = "${vault.target}/.obsidian/core-plugins-migration.json";
|
||||
value.source = (pkgs.formats.json { }).generate "core-plugins-migration.json" (
|
||||
builtins.listToAttrs (
|
||||
builtins.map (name: {
|
||||
map (name: {
|
||||
inherit name;
|
||||
value = builtins.any (plugin: name == plugin.name && plugin.enable) vault.settings.corePlugins;
|
||||
}) corePlugins
|
||||
@@ -453,7 +453,7 @@ in
|
||||
);
|
||||
}
|
||||
]
|
||||
++ builtins.map (plugin: {
|
||||
++ map (plugin: {
|
||||
name = "${vault.target}/.obsidian/${plugin.name}.json";
|
||||
value.source = (pkgs.formats.json { }).generate "${plugin.name}.json" plugin.settings;
|
||||
}) (builtins.filter (plugin: plugin.settings != { }) vault.settings.corePlugins);
|
||||
@@ -464,25 +464,25 @@ in
|
||||
{
|
||||
name = "${vault.target}/.obsidian/community-plugins.json";
|
||||
value.source = (pkgs.formats.json { }).generate "community-plugins.json" (
|
||||
builtins.map getManifest (builtins.filter (plugin: plugin.enable) vault.settings.communityPlugins)
|
||||
map getManifest (builtins.filter (plugin: plugin.enable) vault.settings.communityPlugins)
|
||||
);
|
||||
}
|
||||
]
|
||||
++ builtins.map (plugin: {
|
||||
++ map (plugin: {
|
||||
name = "${vault.target}/.obsidian/plugins/${getManifest plugin}";
|
||||
value = {
|
||||
source = plugin.pkg;
|
||||
recursive = true;
|
||||
};
|
||||
}) vault.settings.communityPlugins
|
||||
++ builtins.map (plugin: {
|
||||
++ map (plugin: {
|
||||
name = "${vault.target}/.obsidian/plugins/${getManifest plugin}/data.json";
|
||||
value.source = (pkgs.formats.json { }).generate "data.json" plugin.settings;
|
||||
}) (builtins.filter (plugin: plugin.settings != { }) vault.settings.communityPlugins);
|
||||
|
||||
mkCssSnippets =
|
||||
vault:
|
||||
builtins.map (snippet: {
|
||||
map (snippet: {
|
||||
name = "${vault.target}/.obsidian/snippets/${snippet.name}.css";
|
||||
value =
|
||||
if snippet.source != null then
|
||||
@@ -497,7 +497,7 @@ in
|
||||
|
||||
mkThemes =
|
||||
vault:
|
||||
builtins.map (theme: {
|
||||
map (theme: {
|
||||
name = "${vault.target}/.obsidian/themes/${getManifest theme}";
|
||||
value.source = theme.pkg;
|
||||
}) vault.settings.themes;
|
||||
@@ -509,7 +509,7 @@ in
|
||||
|
||||
mkExtraFiles =
|
||||
vault:
|
||||
builtins.map (file: {
|
||||
map (file: {
|
||||
name = "${vault.target}/.obsidian/${file.target}";
|
||||
value =
|
||||
if file.source != null then
|
||||
@@ -524,7 +524,7 @@ in
|
||||
in
|
||||
builtins.listToAttrs (
|
||||
lib.lists.flatten (
|
||||
builtins.map (vault: [
|
||||
map (vault: [
|
||||
(mkApp vault)
|
||||
(mkAppearance vault)
|
||||
(mkCorePlugins vault)
|
||||
@@ -540,7 +540,7 @@ in
|
||||
|
||||
xdg.configFile."obsidian/obsidian.json".source = (pkgs.formats.json { }).generate "obsidian.json" {
|
||||
vaults = builtins.listToAttrs (
|
||||
builtins.map (vault: {
|
||||
map (vault: {
|
||||
name = builtins.hashString "md5" vault.target;
|
||||
value = {
|
||||
path = "${config.home.homeDirectory}/${vault.target}";
|
||||
|
||||
@@ -126,14 +126,22 @@ in
|
||||
};
|
||||
|
||||
commands = lib.mkOption {
|
||||
type = lib.types.attrsOf (lib.types.either lib.types.lines lib.types.path);
|
||||
type = lib.types.either (lib.types.attrsOf (lib.types.either lib.types.lines lib.types.path)) lib.types.path;
|
||||
default = { };
|
||||
description = ''
|
||||
Custom commands for opencode.
|
||||
The attribute name becomes the command filename, and the value is either:
|
||||
- Inline content as a string
|
||||
- A path to a file containing the command content
|
||||
Commands are stored in {file}`$XDG_CONFIG_HOME/opencode/command/` directory.
|
||||
|
||||
This option can either be:
|
||||
- An attribute set defining commands
|
||||
- A path to a directory containing multiple command files
|
||||
|
||||
If an attribute set is used, the attribute name becomes the command filename,
|
||||
and the value is either:
|
||||
- Inline content as a string (creates `opencode/command/<name>.md`)
|
||||
- A path to a file (creates `opencode/command/<name>.md`)
|
||||
|
||||
If a path is used, it is expected to contain command files.
|
||||
The directory is symlinked to {file}`$XDG_CONFIG_HOME/opencode/command/`.
|
||||
'';
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
@@ -155,14 +163,22 @@ in
|
||||
};
|
||||
|
||||
agents = lib.mkOption {
|
||||
type = lib.types.attrsOf (lib.types.either lib.types.lines lib.types.path);
|
||||
type = lib.types.either (lib.types.attrsOf (lib.types.either lib.types.lines lib.types.path)) lib.types.path;
|
||||
default = { };
|
||||
description = ''
|
||||
Custom agents for opencode.
|
||||
The attribute name becomes the agent filename, and the value is either:
|
||||
- Inline content as a string
|
||||
- A path to a file containing the agent content
|
||||
Agents are stored in {file}`$XDG_CONFIG_HOME/opencode/agent/` directory.
|
||||
|
||||
This option can either be:
|
||||
- An attribute set defining agents
|
||||
- A path to a directory containing multiple agent files
|
||||
|
||||
If an attribute set is used, the attribute name becomes the agent filename,
|
||||
and the value is either:
|
||||
- Inline content as a string (creates `opencode/agent/<name>.md`)
|
||||
- A path to a file (creates `opencode/agent/<name>.md`)
|
||||
|
||||
If a path is used, it is expected to contain agent files.
|
||||
The directory is symlinked to {file}`$XDG_CONFIG_HOME/opencode/agent/`.
|
||||
'';
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
@@ -227,26 +243,94 @@ in
|
||||
};
|
||||
|
||||
themes = mkOption {
|
||||
type = lib.types.attrsOf (lib.types.either jsonFormat.type lib.types.path);
|
||||
type = lib.types.either (lib.types.attrsOf (lib.types.either jsonFormat.type lib.types.path)) lib.types.path;
|
||||
default = { };
|
||||
description = ''
|
||||
Custom themes for opencode. The attribute name becomes the theme
|
||||
filename, and the value is either:
|
||||
- An attribute set, that is converted to a json
|
||||
- A path to a file containing the content
|
||||
Themes are stored in {file}`$XDG_CONFIG_HOME/opencode/themes/` directory.
|
||||
Custom themes for opencode.
|
||||
|
||||
This option can either be:
|
||||
- An attribute set defining themes
|
||||
- A path to a directory containing multiple theme files
|
||||
|
||||
If an attribute set is used, the attribute name becomes the theme filename,
|
||||
and the value is either:
|
||||
- An attribute set that is converted to a JSON file (creates `opencode/themes/<name>.json`)
|
||||
- A path to a file (creates `opencode/themes/<name>.json`)
|
||||
|
||||
If a path is used, it is expected to contain theme files.
|
||||
The directory is symlinked to {file}`$XDG_CONFIG_HOME/opencode/themes/`.
|
||||
|
||||
Set `programs.opencode.settings.theme` to enable the custom theme.
|
||||
See <https://opencode.ai/docs/themes/> for the documentation.
|
||||
'';
|
||||
};
|
||||
|
||||
tools = lib.mkOption {
|
||||
type = lib.types.either (lib.types.attrsOf (lib.types.either lib.types.lines lib.types.path)) lib.types.path;
|
||||
default = { };
|
||||
description = ''
|
||||
Custom tools for opencode.
|
||||
|
||||
This option can either be:
|
||||
- An attribute set defining tools
|
||||
- A path to a directory containing multiple tool files
|
||||
|
||||
If an attribute set is used, the attribute name becomes the tool filename,
|
||||
and the value is either:
|
||||
- Inline content as a string (creates `opencode/tool/<name>.ts`)
|
||||
- A path to a file (creates `opencode/tool/<name>.ts` or `opencode/tool/<name>.js`)
|
||||
|
||||
If a path is used, it is expected to contain tool files.
|
||||
The directory is symlinked to {file}`$XDG_CONFIG_HOME/opencode/tool/`.
|
||||
|
||||
See <https://opencode.ai/docs/tools/> for the documentation.
|
||||
'';
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
database-query = '''
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Query the project database",
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute"),
|
||||
},
|
||||
async execute(args) {
|
||||
// Your database logic here
|
||||
return `Executed query: ''${args.query}`
|
||||
},
|
||||
})
|
||||
''';
|
||||
|
||||
# Or reference an existing file
|
||||
api-client = ./tools/api-client.ts;
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = !lib.isPath cfg.commands || lib.pathIsDirectory cfg.commands;
|
||||
message = "`programs.opencode.commands` must be a directory when set to a path";
|
||||
}
|
||||
{
|
||||
assertion = !lib.isPath cfg.agents || lib.pathIsDirectory cfg.agents;
|
||||
message = "`programs.opencode.agents` must be a directory when set to a path";
|
||||
}
|
||||
{
|
||||
assertion = !lib.isPath cfg.tools || lib.pathIsDirectory cfg.tools;
|
||||
message = "`programs.opencode.tools` must be a directory when set to a path";
|
||||
}
|
||||
{
|
||||
assertion = !lib.isPath cfg.skills || lib.pathIsDirectory cfg.skills;
|
||||
message = "`programs.opencode.skills` must be a directory when set to a path";
|
||||
}
|
||||
{
|
||||
assertion = !lib.isPath cfg.themes || lib.pathIsDirectory cfg.themes;
|
||||
message = "`programs.opencode.themes` must be a directory when set to a path";
|
||||
}
|
||||
];
|
||||
|
||||
home.packages = mkIf (cfg.package != null) [ cfg.package ];
|
||||
@@ -278,23 +362,55 @@ in
|
||||
})
|
||||
);
|
||||
|
||||
"opencode/command" = mkIf (lib.isPath cfg.commands) {
|
||||
source = cfg.commands;
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
"opencode/agent" = mkIf (lib.isPath cfg.agents) {
|
||||
source = cfg.agents;
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
"opencode/tool" = mkIf (lib.isPath cfg.tools) {
|
||||
source = cfg.tools;
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
"opencode/skill" = mkIf (lib.isPath cfg.skills) {
|
||||
source = cfg.skills;
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
"opencode/themes" = mkIf (lib.isPath cfg.themes) {
|
||||
source = cfg.themes;
|
||||
recursive = true;
|
||||
};
|
||||
}
|
||||
// lib.mapAttrs' (
|
||||
name: content:
|
||||
lib.nameValuePair "opencode/command/${name}.md" (
|
||||
if lib.isPath content then { source = content; } else { text = content; }
|
||||
)
|
||||
) cfg.commands
|
||||
// lib.mapAttrs' (
|
||||
name: content:
|
||||
lib.nameValuePair "opencode/agent/${name}.md" (
|
||||
if lib.isPath content then { source = content; } else { text = content; }
|
||||
)
|
||||
) cfg.agents
|
||||
// lib.optionalAttrs (builtins.isAttrs cfg.commands) (
|
||||
lib.mapAttrs' (
|
||||
name: content:
|
||||
lib.nameValuePair "opencode/command/${name}.md" (
|
||||
if lib.isPath content then { source = content; } else { text = content; }
|
||||
)
|
||||
) cfg.commands
|
||||
)
|
||||
// lib.optionalAttrs (builtins.isAttrs cfg.agents) (
|
||||
lib.mapAttrs' (
|
||||
name: content:
|
||||
lib.nameValuePair "opencode/agent/${name}.md" (
|
||||
if lib.isPath content then { source = content; } else { text = content; }
|
||||
)
|
||||
) cfg.agents
|
||||
)
|
||||
// lib.optionalAttrs (builtins.isAttrs cfg.tools) (
|
||||
lib.mapAttrs' (
|
||||
name: content:
|
||||
lib.nameValuePair "opencode/tool/${name}.ts" (
|
||||
if lib.isPath content then { source = content; } else { text = content; }
|
||||
)
|
||||
) cfg.tools
|
||||
)
|
||||
// lib.mapAttrs' (
|
||||
name: content:
|
||||
if lib.isPath content && lib.pathIsDirectory content then
|
||||
@@ -307,23 +423,25 @@ in
|
||||
if lib.isPath content then { source = content; } else { text = content; }
|
||||
)
|
||||
) (if builtins.isAttrs cfg.skills then cfg.skills else { })
|
||||
// lib.mapAttrs' (
|
||||
name: content:
|
||||
lib.nameValuePair "opencode/themes/${name}.json" (
|
||||
if lib.isPath content then
|
||||
{
|
||||
source = content;
|
||||
}
|
||||
else
|
||||
{
|
||||
source = jsonFormat.generate "opencode-${name}.json" (
|
||||
{
|
||||
"$schema" = "https://opencode.ai/theme.json";
|
||||
}
|
||||
// content
|
||||
);
|
||||
}
|
||||
)
|
||||
) cfg.themes;
|
||||
// lib.optionalAttrs (builtins.isAttrs cfg.themes) (
|
||||
lib.mapAttrs' (
|
||||
name: content:
|
||||
lib.nameValuePair "opencode/themes/${name}.json" (
|
||||
if lib.isPath content then
|
||||
{
|
||||
source = content;
|
||||
}
|
||||
else
|
||||
{
|
||||
source = jsonFormat.generate "opencode-${name}.json" (
|
||||
{
|
||||
"$schema" = "https://opencode.ai/theme.json";
|
||||
}
|
||||
// content
|
||||
);
|
||||
}
|
||||
)
|
||||
) cfg.themes
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ let
|
||||
|
||||
in
|
||||
{
|
||||
meta.maintainers = [ lib.hm.maintainers.nickthegroot ];
|
||||
meta.maintainers = [ lib.maintainers.nickthegroot ];
|
||||
|
||||
options.programs.pgcli = {
|
||||
enable = mkEnableOption "pgcli";
|
||||
|
||||
@@ -9,6 +9,9 @@ let
|
||||
|
||||
cfg = config.programs.pistol;
|
||||
|
||||
configDir =
|
||||
if pkgs.stdenv.hostPlatform.isDarwin then "Library/Preferences" else config.xdg.configHome;
|
||||
|
||||
configFile = lib.concatStringsSep "\n" (
|
||||
map (
|
||||
{
|
||||
@@ -74,31 +77,23 @@ in
|
||||
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable (
|
||||
lib.mkMerge [
|
||||
config = mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertions = [
|
||||
{
|
||||
assertion = lib.all (
|
||||
{ fpath, mime, ... }: (fpath != "" && mime == "") || (fpath == "" && mime != "")
|
||||
) cfg.associations;
|
||||
message = ''
|
||||
Each entry in programs.pistol.associations must contain exactly one
|
||||
of fpath or mime.
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
|
||||
assertion = lib.all (
|
||||
{ fpath, mime, ... }: (fpath != "" && mime == "") || (fpath == "" && mime != "")
|
||||
) cfg.associations;
|
||||
message = ''
|
||||
Each entry in programs.pistol.associations must contain exactly one
|
||||
of fpath or mime.
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
(mkIf (cfg.associations != [ ] && pkgs.stdenv.hostPlatform.isDarwin) {
|
||||
home.file."Library/Preferences/pistol/pistol.conf".text = configFile;
|
||||
})
|
||||
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
|
||||
|
||||
(mkIf (cfg.associations != [ ] && !pkgs.stdenv.hostPlatform.isDarwin) {
|
||||
xdg.configFile."pistol/pistol.conf".text = configFile;
|
||||
})
|
||||
]
|
||||
);
|
||||
home.file."${configDir}/pistol/pistol.conf" = mkIf (cfg.associations != [ ]) {
|
||||
text = configFile;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -19,11 +19,11 @@ let
|
||||
valueToString =
|
||||
value:
|
||||
if builtins.isList value then
|
||||
builtins.concatStringsSep "," (builtins.map valueToString value)
|
||||
builtins.concatStringsSep "," (map valueToString value)
|
||||
else if builtins.isAttrs value then
|
||||
valueToString (lib.mapAttrsToList (key: val: "${valueToString key}=${valueToString val}") value)
|
||||
else
|
||||
builtins.toString value;
|
||||
toString value;
|
||||
|
||||
modulesArgument = optionalString (cfg.modules != null) " -modules ${valueToString cfg.modules}";
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ let
|
||||
else if builtins.isList v then
|
||||
"[${concatStringsSep ", " (map pythonize v)}]"
|
||||
else
|
||||
builtins.toString v;
|
||||
toString v;
|
||||
|
||||
formatDictLine =
|
||||
o: n: v:
|
||||
@@ -336,22 +336,20 @@ in
|
||||
greasemonkeyDir = lib.optionals (
|
||||
cfg.greasemonkey != [ ]
|
||||
) pkgs.linkFarmFromDrvs "greasemonkey-userscripts" cfg.greasemonkey;
|
||||
|
||||
configDir =
|
||||
if pkgs.stdenv.hostPlatform.isDarwin then
|
||||
".qutebrowser"
|
||||
else
|
||||
"${config.xdg.configHome}/qutebrowser";
|
||||
in
|
||||
mkIf cfg.enable {
|
||||
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
|
||||
|
||||
home.file.".qutebrowser/config.py" = mkIf pkgs.stdenv.hostPlatform.isDarwin {
|
||||
text = qutebrowserConfig;
|
||||
};
|
||||
|
||||
home.file.".qutebrowser/quickmarks" =
|
||||
mkIf (cfg.quickmarks != { } && pkgs.stdenv.hostPlatform.isDarwin)
|
||||
{
|
||||
text = quickmarksFile;
|
||||
};
|
||||
|
||||
xdg.configFile."qutebrowser/config.py" = mkIf pkgs.stdenv.hostPlatform.isLinux {
|
||||
home.file."${configDir}/config.py" = {
|
||||
text = qutebrowserConfig;
|
||||
}
|
||||
// lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux {
|
||||
onChange = ''
|
||||
hash="$(echo -n "$USER" | md5sum | cut -d' ' -f1)"
|
||||
socket="''${XDG_RUNTIME_DIR:-/run/user/$UID}/qutebrowser/ipc-$hash"
|
||||
@@ -371,22 +369,12 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
xdg.configFile."qutebrowser/quickmarks" =
|
||||
mkIf (cfg.quickmarks != { } && pkgs.stdenv.hostPlatform.isLinux)
|
||||
{
|
||||
text = quickmarksFile;
|
||||
};
|
||||
home.file."${configDir}/quickmarks" = mkIf (cfg.quickmarks != { }) {
|
||||
text = quickmarksFile;
|
||||
};
|
||||
|
||||
home.file.".qutebrowser/greasemonkey" =
|
||||
mkIf (cfg.greasemonkey != [ ] && pkgs.stdenv.hostPlatform.isDarwin)
|
||||
{
|
||||
source = greasemonkeyDir;
|
||||
};
|
||||
|
||||
xdg.configFile."qutebrowser/greasemonkey" =
|
||||
mkIf (cfg.greasemonkey != [ ] && pkgs.stdenv.hostPlatform.isLinux)
|
||||
{
|
||||
source = greasemonkeyDir;
|
||||
};
|
||||
home.file."${configDir}/greasemonkey" = mkIf (cfg.greasemonkey != [ ]) {
|
||||
source = greasemonkeyDir;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -168,7 +168,7 @@ in
|
||||
}
|
||||
{
|
||||
assertion = cfg.uri.web-rad.enable -> cfg.uri.web-rad.browser != null;
|
||||
message = "Could not detect preferred browser. Please set `${builtins.toString opt.uri.web-rad.browser}`.";
|
||||
message = "Could not detect preferred browser. Please set `${toString opt.uri.web-rad.browser}`.";
|
||||
}
|
||||
{
|
||||
assertion =
|
||||
|
||||
@@ -71,7 +71,7 @@ in
|
||||
|
||||
home.file.".rbenv/plugins" = mkIf (cfg.plugins != [ ]) {
|
||||
source = pkgs.linkFarm "rbenv-plugins" (
|
||||
builtins.map (p: {
|
||||
map (p: {
|
||||
name = p.name;
|
||||
path = p.src;
|
||||
}) cfg.plugins
|
||||
|
||||
@@ -10,7 +10,6 @@ let
|
||||
jsonFormat = pkgs.formats.json { };
|
||||
|
||||
inherit (lib) mkOption types;
|
||||
inherit (pkgs.stdenv.hostPlatform) isDarwin;
|
||||
|
||||
settingsModule = types.submodule {
|
||||
freeformType = jsonFormat.type;
|
||||
@@ -62,6 +61,9 @@ let
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
configDir =
|
||||
if pkgs.stdenv.hostPlatform.isDarwin then "Library/Application Support" else config.xdg.configHome;
|
||||
in
|
||||
{
|
||||
meta.maintainers = with lib.maintainers; [ ambroisie ];
|
||||
@@ -93,21 +95,11 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable (
|
||||
lib.mkMerge [
|
||||
{
|
||||
home.packages = [ cfg.package ];
|
||||
}
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.packages = [ cfg.package ];
|
||||
|
||||
# Only manage configuration if not empty
|
||||
(lib.mkIf (cfg.settings != null && !isDarwin) {
|
||||
xdg.configFile."rbw/config.json".source = jsonFormat.generate "rbw-config.json" cfg.settings;
|
||||
})
|
||||
|
||||
(lib.mkIf (cfg.settings != null && isDarwin) {
|
||||
home.file."Library/Application Support/rbw/config.json".source =
|
||||
jsonFormat.generate "rbw-config.json" cfg.settings;
|
||||
})
|
||||
]
|
||||
);
|
||||
home.file."${configDir}/rbw/config.json" = lib.mkIf (cfg.settings != null) {
|
||||
source = jsonFormat.generate "rbw-config.json" cfg.settings;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ let
|
||||
modes = map (mode: if isString mode then mode else "${mode.name}:${mode.path}") cfg.modes;
|
||||
in
|
||||
{
|
||||
meta.maintainers = with lib.maintainers; [ ];
|
||||
meta.maintainers = [ ];
|
||||
|
||||
options.programs.rofi = {
|
||||
enable = lib.mkEnableOption "Rofi: A window switcher, application launcher and dmenu replacement";
|
||||
|
||||
@@ -11,6 +11,9 @@ let
|
||||
|
||||
iniFormat = pkgs.formats.ini { };
|
||||
|
||||
configDir =
|
||||
if pkgs.stdenv.hostPlatform.isDarwin then "Library/Preferences" else config.xdg.configHome;
|
||||
|
||||
in
|
||||
{
|
||||
meta.maintainers = [ lib.maintainers.pbar ];
|
||||
@@ -55,32 +58,22 @@ in
|
||||
{
|
||||
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
|
||||
|
||||
programs.sapling.iniContent.ui = {
|
||||
username = cfg.userName + " <" + cfg.userEmail + ">";
|
||||
programs.sapling.iniContent = {
|
||||
alias = mkIf (cfg.aliases != { }) cfg.aliases;
|
||||
ui.username = cfg.userName + " <" + cfg.userEmail + ">";
|
||||
};
|
||||
|
||||
home.file."${configDir}/sapling/sapling.conf" = mkIf (cfg.iniContent != { }) {
|
||||
source = iniFormat.generate "sapling.conf" cfg.iniContent;
|
||||
};
|
||||
}
|
||||
|
||||
(mkIf (!pkgs.stdenv.isDarwin) {
|
||||
xdg.configFile."sapling/sapling.conf".source = iniFormat.generate "sapling.conf" cfg.iniContent;
|
||||
})
|
||||
(mkIf (pkgs.stdenv.isDarwin) {
|
||||
home.file."Library/Preferences/sapling/sapling.conf".source =
|
||||
iniFormat.generate "sapling.conf" cfg.iniContent;
|
||||
})
|
||||
|
||||
(mkIf (cfg.aliases != { }) {
|
||||
programs.sapling.iniContent.alias = cfg.aliases;
|
||||
})
|
||||
|
||||
(mkIf (lib.isAttrs cfg.extraConfig) {
|
||||
programs.sapling.iniContent = cfg.extraConfig;
|
||||
})
|
||||
|
||||
(mkIf (lib.isString cfg.extraConfig && !pkgs.stdenv.isDarwin) {
|
||||
xdg.configFile."sapling/sapling.conf".text = cfg.extraConfig;
|
||||
})
|
||||
(mkIf (lib.isString cfg.extraConfig && pkgs.stdenv.isDarwin) {
|
||||
home.file."Library/Preferences/sapling/sapling.conf".text = cfg.extraConfig;
|
||||
(mkIf (lib.isString cfg.extraConfig) {
|
||||
home.file."${configDir}/sapling/sapling.conf".text = cfg.extraConfig;
|
||||
})
|
||||
]
|
||||
);
|
||||
|
||||
@@ -40,6 +40,12 @@ let
|
||||
description = "The remote path to mount.";
|
||||
};
|
||||
|
||||
mountDestPath = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = "The path on the current machine where the remote path would be mounted.";
|
||||
};
|
||||
|
||||
authType = mkOption {
|
||||
type = types.enum [
|
||||
"password"
|
||||
@@ -47,6 +53,7 @@ let
|
||||
"hostbased"
|
||||
"keyboard-interactive"
|
||||
"gssapi-with-mic"
|
||||
"authentication-agent"
|
||||
];
|
||||
default = "publickey";
|
||||
description = "The authentication method to use.";
|
||||
|
||||
@@ -158,7 +158,7 @@ in
|
||||
prjConf =
|
||||
lib.attrsets.mapAttrs' (
|
||||
name: value:
|
||||
(lib.attrsets.nameValuePair (if name == "beforeStart" then "before_start" else name) (value))
|
||||
(lib.attrsets.nameValuePair (if name == "beforeStart" then "before_start" else name) value)
|
||||
) v
|
||||
// {
|
||||
session = k;
|
||||
|
||||
@@ -9,6 +9,11 @@ let
|
||||
|
||||
cfg = config.programs.streamlink;
|
||||
|
||||
configDir =
|
||||
if pkgs.stdenv.hostPlatform.isDarwin then "Library/Application Support" else config.xdg.configHome;
|
||||
dataDir =
|
||||
if pkgs.stdenv.hostPlatform.isDarwin then "Library/Application Support" else config.xdg.dataHome;
|
||||
|
||||
renderSettings =
|
||||
settings:
|
||||
lib.concatLines (
|
||||
@@ -18,9 +23,9 @@ let
|
||||
if (builtins.isBool value) then
|
||||
if value then name else ""
|
||||
else if (builtins.isList value) then
|
||||
lib.concatStringsSep "\n" (builtins.map (item: "${name}=${builtins.toString item}") value)
|
||||
lib.concatStringsSep "\n" (map (item: "${name}=${toString item}") value)
|
||||
else
|
||||
"${name}=${builtins.toString value}"
|
||||
"${name}=${toString value}"
|
||||
) settings
|
||||
)
|
||||
);
|
||||
@@ -130,72 +135,36 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable (
|
||||
lib.mkMerge [
|
||||
{ home.packages = lib.mkIf (cfg.package != null) [ cfg.package ]; }
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
|
||||
|
||||
(lib.mkIf pkgs.stdenv.hostPlatform.isLinux {
|
||||
xdg.configFile = {
|
||||
"streamlink/config" = lib.mkIf (cfg.settings != { }) {
|
||||
text = renderSettings cfg.settings;
|
||||
};
|
||||
home.file = {
|
||||
"${configDir}/streamlink/config" = lib.mkIf (cfg.settings != { }) {
|
||||
text = renderSettings cfg.settings;
|
||||
};
|
||||
}
|
||||
// (lib.mapAttrs' (
|
||||
name: value:
|
||||
lib.nameValuePair "${configDir}/streamlink/config.${name}" (
|
||||
lib.mkIf (value.settings != { }) {
|
||||
text = renderSettings value.settings;
|
||||
}
|
||||
// (lib.mapAttrs' (
|
||||
name: value:
|
||||
lib.nameValuePair "streamlink/config.${name}" (
|
||||
lib.mkIf (value.settings != { }) {
|
||||
text = renderSettings value.settings;
|
||||
)
|
||||
) cfg.plugins)
|
||||
// (lib.mapAttrs' (
|
||||
name: value:
|
||||
lib.nameValuePair "${dataDir}/streamlink/plugins/${name}.py" (
|
||||
lib.mkIf (value.src != null) (
|
||||
if (builtins.isPath value.src) then
|
||||
{
|
||||
source = value.src;
|
||||
}
|
||||
)
|
||||
) cfg.plugins);
|
||||
|
||||
xdg.dataFile = lib.mapAttrs' (
|
||||
name: value:
|
||||
lib.nameValuePair "streamlink/plugins/${name}.py" (
|
||||
lib.mkIf (value.src != null) (
|
||||
if (builtins.isPath value.src) then
|
||||
{
|
||||
source = value.src;
|
||||
}
|
||||
else
|
||||
{
|
||||
text = value.src;
|
||||
}
|
||||
)
|
||||
)
|
||||
) cfg.plugins;
|
||||
})
|
||||
|
||||
(lib.mkIf pkgs.stdenv.hostPlatform.isDarwin {
|
||||
home.file = {
|
||||
"Library/Application Support/streamlink/config" = lib.mkIf (cfg.settings != { }) {
|
||||
text = renderSettings cfg.settings;
|
||||
};
|
||||
}
|
||||
// (lib.mapAttrs' (
|
||||
name: value:
|
||||
lib.nameValuePair "Library/Application Support/streamlink/config.${name}" (
|
||||
lib.mkIf (value.settings != { }) {
|
||||
text = renderSettings value.settings;
|
||||
else
|
||||
{
|
||||
text = value.src;
|
||||
}
|
||||
)
|
||||
) cfg.plugins)
|
||||
// (lib.mapAttrs' (
|
||||
name: value:
|
||||
lib.nameValuePair "Library/Application Support/streamlink/plugins/${name}.py" (
|
||||
lib.mkIf (value.src != null) (
|
||||
if (builtins.isPath value.src) then
|
||||
{
|
||||
source = value.src;
|
||||
}
|
||||
else
|
||||
{
|
||||
text = value.src;
|
||||
}
|
||||
)
|
||||
)
|
||||
) cfg.plugins);
|
||||
})
|
||||
]
|
||||
);
|
||||
)
|
||||
)
|
||||
) cfg.plugins);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -85,8 +85,7 @@ in
|
||||
if v == false then
|
||||
""
|
||||
else
|
||||
(if v == true then n else n + "=" + (if builtins.isPath v then "${v}" else builtins.toString v))
|
||||
+ "\n"
|
||||
(if v == true then n else n + "=" + (if builtins.isPath v then "${v}" else toString v)) + "\n"
|
||||
) cfg.settings
|
||||
);
|
||||
};
|
||||
|
||||
@@ -183,14 +183,12 @@ let
|
||||
3;
|
||||
"mail.smtpserver.smtp_${id}.username" = account.userName;
|
||||
}
|
||||
// builtins.foldl' (a: b: a // b) { } (
|
||||
builtins.map (address: toThunderbirdSMTP account address) addresses
|
||||
)
|
||||
// builtins.foldl' (a: b: a // b) { } (map (address: toThunderbirdSMTP account address) addresses)
|
||||
// optionalAttrs (account.smtp != null && account.primary) {
|
||||
"mail.smtp.defaultserver" = "smtp_${id}";
|
||||
}
|
||||
// builtins.foldl' (a: b: a // b) { } (
|
||||
builtins.map (address: toThunderbirdIdentity account address) addresses
|
||||
map (address: toThunderbirdIdentity account address) addresses
|
||||
)
|
||||
// account.thunderbird.settings id;
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ in
|
||||
let
|
||||
conf =
|
||||
optional (cfg.host != null) ''set -g tmate-server-host "${cfg.host}"''
|
||||
++ optional (cfg.port != null) "set -g tmate-server-port ${builtins.toString cfg.port}"
|
||||
++ optional (cfg.port != null) "set -g tmate-server-port ${toString cfg.port}"
|
||||
++ optional (
|
||||
cfg.dsaFingerprint != null
|
||||
) ''set -g tmate-server-ed25519-fingerprint "${cfg.dsaFingerprint}"''
|
||||
|
||||
@@ -92,9 +92,12 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable (
|
||||
config =
|
||||
let
|
||||
config =
|
||||
configDir =
|
||||
if pkgs.stdenv.hostPlatform.isDarwin then "Library/Application Support" else config.xdg.configHome;
|
||||
|
||||
configFiles =
|
||||
lib.attrsets.unionOfDisjoint
|
||||
{
|
||||
"vesktop/settings.json" = lib.mkIf (cfg.settings != { }) {
|
||||
@@ -117,16 +120,11 @@ in
|
||||
) cfg.vencord.themes
|
||||
);
|
||||
in
|
||||
lib.mkMerge [
|
||||
{
|
||||
home.packages = [
|
||||
(cfg.package.override { withSystemVencord = cfg.vencord.useSystem; })
|
||||
];
|
||||
}
|
||||
(lib.mkIf (!pkgs.stdenv.hostPlatform.isDarwin) { xdg.configFile = config; })
|
||||
(lib.mkIf pkgs.stdenv.hostPlatform.isDarwin {
|
||||
home.file = lib.mapAttrs' (n: v: lib.nameValuePair "Library/Application Support/${n}" v) config;
|
||||
})
|
||||
]
|
||||
);
|
||||
lib.mkIf cfg.enable {
|
||||
home.packages = [
|
||||
(cfg.package.override { withSystemVencord = cfg.vencord.useSystem; })
|
||||
];
|
||||
|
||||
home.file = lib.mapAttrs' (n: lib.nameValuePair "${configDir}/${n}") configFiles;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -240,7 +240,7 @@ in
|
||||
|
||||
dataFile =
|
||||
builtins.listToAttrs (
|
||||
builtins.map (item: {
|
||||
map (item: {
|
||||
name = "vicinae/extensions/${item.name}";
|
||||
value.source = item;
|
||||
}) cfg.extensions
|
||||
@@ -263,7 +263,7 @@ in
|
||||
KillMode = "process";
|
||||
EnvironmentFile = lib.mkIf (!versionPost0_17) (
|
||||
pkgs.writeText "vicinae-env" ''
|
||||
USE_LAYER_SHELL=${if cfg.useLayerShell then builtins.toString 1 else builtins.toString 0}
|
||||
USE_LAYER_SHELL=${if cfg.useLayerShell then toString 1 else toString 0}
|
||||
''
|
||||
);
|
||||
};
|
||||
|
||||
@@ -517,7 +517,7 @@ in
|
||||
else
|
||||
{ };
|
||||
# Merge MCP servers: transformed servers + user servers, with user servers taking precedence
|
||||
mergedServers = transformedMcpServers // ((v.userMcp.servers or { }));
|
||||
mergedServers = transformedMcpServers // (v.userMcp.servers or { });
|
||||
# Merge all MCP config
|
||||
mergedMcpConfig =
|
||||
v.userMcp // (lib.optionalAttrs (mergedServers != { }) { servers = mergedServers; });
|
||||
|
||||
@@ -301,7 +301,7 @@ in
|
||||
{
|
||||
assertions = [
|
||||
(lib.hm.assertions.assertPlatform "programs.waybar" pkgs lib.platforms.linux)
|
||||
({
|
||||
{
|
||||
assertion =
|
||||
if lib.versionAtLeast config.home.stateVersion "22.05" then
|
||||
all (x: !hasAttr "modules" x || x.modules == null) settings
|
||||
@@ -311,7 +311,7 @@ in
|
||||
The `programs.waybar.settings.[].modules` option has been removed.
|
||||
It is now possible to declare modules in the configuration without nesting them under the `modules` option.
|
||||
'';
|
||||
})
|
||||
}
|
||||
];
|
||||
|
||||
home.packages = [ cfg.package ];
|
||||
|
||||
@@ -58,7 +58,7 @@ in
|
||||
xdg.configFile."waylogout/config" = lib.mkIf (cfg.settings != { }) {
|
||||
text = lib.concatStrings (
|
||||
lib.mapAttrsToList (
|
||||
n: v: if v == false then "" else (if v == true then n else n + "=" + builtins.toString v) + "\n"
|
||||
n: v: if v == false then "" else (if v == true then n else n + "=" + toString v) + "\n"
|
||||
) cfg.settings
|
||||
);
|
||||
};
|
||||
|
||||
@@ -35,7 +35,7 @@ let
|
||||
'';
|
||||
}
|
||||
else
|
||||
builtins.dirOf value;
|
||||
dirOf value;
|
||||
|
||||
makePluginSearchPath = p: "${p}/?/init.lua;${p}/?.lua";
|
||||
|
||||
@@ -46,9 +46,9 @@ let
|
||||
searchPaths = map makePluginSearchPath wrappedPlugins;
|
||||
pluginSearchPath = lib.concatStringsSep ";" searchPaths;
|
||||
in
|
||||
(''
|
||||
''
|
||||
package.path = "${pluginSearchPath};" .. package.path
|
||||
'')
|
||||
''
|
||||
else
|
||||
"\n";
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ in
|
||||
};
|
||||
|
||||
Service = {
|
||||
Environment = with pkgs; "PATH=${makeBinPath cfg.extraPackages}";
|
||||
Environment = "PATH=${makeBinPath cfg.extraPackages}";
|
||||
ExecStart = "${cfg.package}/bin/fusuma";
|
||||
};
|
||||
|
||||
|
||||
@@ -168,7 +168,7 @@ in
|
||||
packages = [ cfg.package ];
|
||||
sessionVariables = mkIf cfg.enableSessionVariables (
|
||||
{
|
||||
MPD_PORT = builtins.toString cfg.network.port;
|
||||
MPD_PORT = toString cfg.network.port;
|
||||
}
|
||||
// lib.optionalAttrs (cfg.network.listenAddress != "any") {
|
||||
MPD_HOST = cfg.network.listenAddress;
|
||||
|
||||
@@ -23,9 +23,9 @@ let
|
||||
|
||||
${k}='' (mapAttrsToList normalizeKeyValue v))
|
||||
else
|
||||
builtins.toString v;
|
||||
toString v;
|
||||
in
|
||||
if builtins.isNull v then "" else "${k}=${v'}";
|
||||
if isNull v then "" else "${k}=${v'}";
|
||||
|
||||
primitiveAttrs = with types; attrsOf (either primitive (listOf primitive));
|
||||
primitiveList = with types; listOf primitive;
|
||||
|
||||
@@ -15,7 +15,7 @@ let
|
||||
''}
|
||||
|
||||
USE_BACKUP="${if cfg.useBackup then "yes" else "no"}"
|
||||
BACKUP_LIMIT=${builtins.toString cfg.backupLimit}
|
||||
BACKUP_LIMIT=${toString cfg.backupLimit}
|
||||
'';
|
||||
in
|
||||
{
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
let
|
||||
cfg = config.services.pueue;
|
||||
yamlFormat = pkgs.formats.yaml { };
|
||||
configDir =
|
||||
if pkgs.stdenv.hostPlatform.isDarwin then "Library/Application Support" else config.xdg.configHome;
|
||||
configFile = yamlFormat.generate "pueue.yaml" ({ shared = { }; } // cfg.settings);
|
||||
pueuedBin = "${cfg.package}/bin/pueued";
|
||||
in
|
||||
@@ -38,7 +40,7 @@ in
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
|
||||
|
||||
xdg.configFile."pueue/pueue.yml" = lib.mkIf pkgs.stdenv.isLinux { source = configFile; };
|
||||
home.file."${configDir}/pueue/pueue.yml".source = configFile;
|
||||
|
||||
systemd.user = lib.mkIf (cfg.package != null) {
|
||||
services.pueued = {
|
||||
@@ -55,12 +57,6 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
# This is the default configuration file location for pueue on
|
||||
# darwin (https://github.com/Nukesor/pueue/wiki/Configuration)
|
||||
home.file."Library/Application Support/pueue/pueue.yml" = lib.mkIf pkgs.stdenv.isDarwin {
|
||||
source = configFile;
|
||||
};
|
||||
|
||||
launchd.agents.pueued = lib.mkIf (cfg.package != null) {
|
||||
enable = true;
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ in
|
||||
StopWhenUnneeded = cfg.node.lazy.enable;
|
||||
ConditionPathExists = radicleKeyPair;
|
||||
};
|
||||
Service = mkMerge ([
|
||||
Service = mkMerge [
|
||||
{
|
||||
Slice = "session.slice";
|
||||
ExecStart = "${getExe' cfg.node.package "radicle-node"} ${cfg.node.args}";
|
||||
@@ -182,7 +182,7 @@ in
|
||||
"~@setuid"
|
||||
];
|
||||
}
|
||||
]);
|
||||
];
|
||||
};
|
||||
"radicle-node-proxy" = mkIf cfg.node.lazy.enable {
|
||||
Unit = {
|
||||
|
||||
@@ -239,7 +239,7 @@ in
|
||||
configFullPath = config.xdg.configHome + "/${xdgConfigFilePath}";
|
||||
in
|
||||
"${cfg.package}/bin/${command} "
|
||||
+ lib.cli.toGNUCommandLineShell { } {
|
||||
+ lib.cli.toCommandLineShellGNU { } {
|
||||
v = cfg.enableVerboseLogging;
|
||||
c = configFullPath;
|
||||
};
|
||||
|
||||
@@ -37,6 +37,17 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
pkcs11Whitelist = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [ ];
|
||||
example = lib.literalExpression ''[ "''${pkgs.tpm2-pkcs11}/lib/*" ]'';
|
||||
description = ''
|
||||
Specify a list of approved path patterns for PKCS#11 and FIDO authenticator middleware libraries. When using the -s or -S options with {manpage}`ssh-add(1)`, only libraries matching these patterns will be accepted.
|
||||
|
||||
See {manpage}`ssh-agent(1)`.
|
||||
'';
|
||||
};
|
||||
|
||||
enableBashIntegration = lib.hm.shell.mkBashIntegrationOption { inherit config; };
|
||||
|
||||
enableZshIntegration = lib.hm.shell.mkZshIntegrationOption { inherit config; };
|
||||
@@ -101,6 +112,10 @@ in
|
||||
lib.optionalString (
|
||||
cfg.defaultMaximumIdentityLifetime != null
|
||||
) " -t ${toString cfg.defaultMaximumIdentityLifetime}"
|
||||
}${
|
||||
lib.optionalString (
|
||||
cfg.pkcs11Whitelist != [ ]
|
||||
) " -P '${lib.concatStringsSep "," cfg.pkcs11Whitelist}'"
|
||||
}";
|
||||
};
|
||||
|
||||
@@ -114,6 +129,10 @@ in
|
||||
lib.optionalString (
|
||||
cfg.defaultMaximumIdentityLifetime != null
|
||||
) " -t ${toString cfg.defaultMaximumIdentityLifetime}"
|
||||
}${
|
||||
lib.optionalString (
|
||||
cfg.pkcs11Whitelist != [ ]
|
||||
) " -P '${lib.concatStringsSep "," cfg.pkcs11Whitelist}'"
|
||||
}''
|
||||
];
|
||||
KeepAlive = {
|
||||
@@ -124,7 +143,5 @@ in
|
||||
RunAtLoad = true;
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -130,6 +130,7 @@ in
|
||||
- `HYPRLAND_INSTANCE_SIGNATURE`
|
||||
- `WAYLAND_DISPLAY`
|
||||
- `XDG_CURRENT_DESKTOP`
|
||||
- `XDG_SESSION_TYPE`
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -140,6 +141,7 @@ in
|
||||
"HYPRLAND_INSTANCE_SIGNATURE"
|
||||
"WAYLAND_DISPLAY"
|
||||
"XDG_CURRENT_DESKTOP"
|
||||
"XDG_SESSION_TYPE"
|
||||
];
|
||||
example = [ "--all" ];
|
||||
description = ''
|
||||
@@ -359,7 +361,7 @@ in
|
||||
) cfg.submaps;
|
||||
|
||||
submapWarnings = lib.mapAttrsToList (submapName: nonBinds: ''
|
||||
wayland.windowManager.hyprland.submaps."${submapName}".settings: found non-bind entries: [${builtins.toString nonBinds}], which will have no effect in a submap
|
||||
wayland.windowManager.hyprland.submaps."${submapName}".settings: found non-bind entries: [${toString nonBinds}], which will have no effect in a submap
|
||||
'') (lib.filterAttrs (n: v: v != [ ]) submapWarningsAttrset);
|
||||
in
|
||||
submapWarnings ++ lib.optional inconsistent warning;
|
||||
|
||||
@@ -98,7 +98,7 @@ let
|
||||
attrName = builtins.substring 1 999 k; # Remove "@" prefix
|
||||
attrValue = value.${k};
|
||||
in
|
||||
" ${attrName}=\"${escape (builtins.toString attrValue)}\""
|
||||
" ${attrName}=\"${escape (toString attrValue)}\""
|
||||
) attrKeys
|
||||
);
|
||||
|
||||
@@ -125,7 +125,7 @@ let
|
||||
|
||||
# All other primitive values: wrap in start/end tag
|
||||
else
|
||||
"<${name}>${escape (builtins.toString value)}</${name}>";
|
||||
"<${name}>${escape (toString value)}</${name}>";
|
||||
|
||||
generateXML = name: config: extraConfig: ''
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
@@ -139,7 +139,7 @@ let
|
||||
else if name == "labwc_config" then
|
||||
lib.mapAttrsToList generateRc
|
||||
else
|
||||
builtins.throw "error ${name} is neither openbox_menu nor labwc_config"
|
||||
throw "error ${name} is neither openbox_menu nor labwc_config"
|
||||
)
|
||||
config
|
||||
)
|
||||
|
||||
@@ -75,7 +75,7 @@ let
|
||||
buildServices =
|
||||
style: serviceCfgs: lib.concatLists (lib.mapAttrsToList (buildService style) serviceCfgs);
|
||||
|
||||
servicesStartTimeoutMs = builtins.toString cfg.servicesStartTimeoutMs;
|
||||
servicesStartTimeoutMs = toString cfg.servicesStartTimeoutMs;
|
||||
|
||||
unitBaseType =
|
||||
unitKind: mod:
|
||||
|
||||
@@ -18,13 +18,14 @@ stdenv.mkDerivation {
|
||||
src = ./.;
|
||||
patchPhase = ''
|
||||
substituteInPlace non-nixos-gpu* \
|
||||
--replace '@@resources@@' "$out/resources" \
|
||||
--replace '@@statedir@@' '${nixStateDirectory}' \
|
||||
--replace '@@env@@' "${nonNixosGpuEnv}"
|
||||
--replace-quiet '@@resources@@' "$out/resources" \
|
||||
--replace-quiet '@@statedir@@' '${nixStateDirectory}' \
|
||||
--replace-quiet '@@systemddir@@' "$out/lib/systemd/system" \
|
||||
--replace-quiet '@@env@@' "${nonNixosGpuEnv}"
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p $out/{bin,resources}
|
||||
mkdir -p $out/{bin,resources,lib/systemd/system}
|
||||
cp non-nixos-gpu-setup $out/bin
|
||||
cp non-nixos-gpu.service $out/resources
|
||||
cp non-nixos-gpu.service $out/lib/systemd/system
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ set -e
|
||||
# Install the systemd service file and ensure that the store path won't be
|
||||
# garbage-collected as long as it's installed.
|
||||
unit_path=/etc/systemd/system/non-nixos-gpu.service
|
||||
ln -sf @@resources@@/non-nixos-gpu.service "$unit_path"
|
||||
ln -sf @@systemddir@@/non-nixos-gpu.service "$unit_path"
|
||||
ln -sf "$unit_path" "@@statedir@@"/gcroots/non-nixos-gpu.service
|
||||
|
||||
systemctl daemon-reload
|
||||
|
||||
@@ -211,7 +211,7 @@ in
|
||||
|
||||
makePackageWrapper =
|
||||
vendor: environment: pkg:
|
||||
if builtins.isNull cfg.packages then
|
||||
if isNull cfg.packages then
|
||||
pkg
|
||||
else
|
||||
# Wrap the package's binaries with nixGL, while preserving the rest of
|
||||
|
||||
@@ -29,7 +29,7 @@ let
|
||||
lib = extendedLib;
|
||||
osConfig = config;
|
||||
osClass = _class;
|
||||
modulesPath = builtins.toString ../modules;
|
||||
modulesPath = toString ../modules;
|
||||
}
|
||||
// cfg.extraSpecialArgs;
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ let
|
||||
|
||||
'';
|
||||
|
||||
xdgRuntimeDir = "/run/user/${builtins.toString config.nodes.machine.users.users.alice.uid}";
|
||||
xdgRuntimeDir = "/run/user/${toString config.nodes.machine.users.users.alice.uid}";
|
||||
httpHeadersSecret = pkgs.writeText "http-headers" "Cookie,secret_password=aliceiscool";
|
||||
|
||||
shellVar = mkHttpModule "\\\${XDG_RUNTIME_DIR}/http-headers";
|
||||
|
||||
@@ -26,6 +26,6 @@
|
||||
# Git config should contain difftastic configuration (backward compatibility)
|
||||
assertFileExists home-files/.config/git/config
|
||||
assertFileContains home-files/.config/git/config '[diff]'
|
||||
assertFileRegex home-files/.config/git/config 'external = .*/difft.*--color.*--display'
|
||||
assertFileContains home-files/.config/git/config "external = \"@difftastic@/bin/difft '--color=always' '--display=side-by-side'\""
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
assertFileExists home-files/.config/git/config
|
||||
assertFileContains home-files/.config/git/config '[diff]'
|
||||
# Should have BOTH diff.external AND difftool config when diffToolMode is true
|
||||
assertFileRegex home-files/.config/git/config 'external = .*/difft.*--color.*--display'
|
||||
assertFileRegex home-files/.config/git/config 'tool = "difftastic"'
|
||||
assertFileContains home-files/.config/git/config "external = \"@difftastic@/bin/difft '--color=always' '--display=side-by-side'\""
|
||||
assertFileContains home-files/.config/git/config 'tool = "difftastic"'
|
||||
assertFileContains home-files/.config/git/config '[difftool "difftastic"]'
|
||||
assertFileRegex home-files/.config/git/config 'cmd = .*/difft.*--color.*--display.*\$LOCAL \$REMOTE'
|
||||
assertFileContains home-files/.config/git/config "cmd = \"@difftastic@/bin/difft '--color=always' '--display=side-by-side' \$LOCAL \$REMOTE\""
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
assertFileExists home-files/.config/git/config
|
||||
assertFileContains home-files/.config/git/config '[diff]'
|
||||
# Should have diff.external set
|
||||
assertFileRegex home-files/.config/git/config 'external = .*/difft.*--color.*--display'
|
||||
assertFileContains home-files/.config/git/config "external = \"@difftastic@/bin/difft '--color=always' '--display=side-by-side'\""
|
||||
# Should NOT have difftool config when diffToolMode is explicitly false
|
||||
assertFileNotRegex home-files/.config/git/config 'tool = "difftastic"'
|
||||
assertFileNotRegex home-files/.config/git/config '\[difftool "difftastic"\]'
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
assertFileExists home-files/.config/git/config
|
||||
assertFileContains home-files/.config/git/config '[diff]'
|
||||
# Should have diff.external set
|
||||
assertFileRegex home-files/.config/git/config 'external = .*/difft.*--color.*--display'
|
||||
assertFileContains home-files/.config/git/config "external = \"@difftastic@/bin/difft '--color=always' '--display=side-by-side'\""
|
||||
# Should NOT have difftool config since diffToolMode is false
|
||||
assertFileNotRegex home-files/.config/git/config 'tool = "difftastic"'
|
||||
assertFileNotRegex home-files/.config/git/config '\[difftool "difftastic"\]'
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
};
|
||||
};
|
||||
nixpkgs.overlays = [
|
||||
(self: super: rec {
|
||||
(self: super: {
|
||||
openshift = config.lib.test.mkStubPackage {
|
||||
name = "openshift";
|
||||
version = "4.16.0";
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
assertFileExists home-files/.config/lesskey
|
||||
assertFileContent home-files/.config/lesskey ${builtins.toFile "lesskey.expected" ''
|
||||
#env
|
||||
LESS = --quiet --use-color --color HkK --color Mkb --prompt s%f
|
||||
LESS = --quiet --use-color --color=HkK --color=Mkb --prompt=s%f
|
||||
''}
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ in
|
||||
assertFileExists home-files/.config/lesskey
|
||||
assertFileContent home-files/.config/lesskey ${builtins.toFile "less.expected" ''
|
||||
#env
|
||||
LESS = --RAW-CONTROL-CHARS --quiet --wheel-lines 3 --wheel-lines 1
|
||||
LESS = --RAW-CONTROL-CHARS --quiet --wheel-lines=3 --wheel-lines=1
|
||||
|
||||
${config}''}
|
||||
'';
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
assertFileExists home-files/.config/lesskey
|
||||
assertFileContent home-files/.config/lesskey ${builtins.toFile "lesskey.expected" ''
|
||||
#env
|
||||
LESS = --RAW-CONTROL-CHARS --quiet --wheel-lines 3 --wheel-lines 1
|
||||
LESS = --RAW-CONTROL-CHARS --quiet --wheel-lines=3 --wheel-lines=1
|
||||
''}
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
# plugins without associated config should not trigger the creation of init.vim
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
vim-fugitive
|
||||
({ plugin = vim-sensible; })
|
||||
{ plugin = vim-sensible; }
|
||||
];
|
||||
};
|
||||
nmt.script = ''
|
||||
|
||||
15
tests/modules/programs/opencode/agents-bulk-directory.nix
Normal file
15
tests/modules/programs/opencode/agents-bulk-directory.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
programs.opencode = {
|
||||
enable = true;
|
||||
agents = ./agents-bulk;
|
||||
};
|
||||
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.config/opencode/agent/code-reviewer.md
|
||||
assertFileExists home-files/.config/opencode/agent/documentation.md
|
||||
assertFileContent home-files/.config/opencode/agent/code-reviewer.md \
|
||||
${./agents-bulk/code-reviewer.md}
|
||||
assertFileContent home-files/.config/opencode/agent/documentation.md \
|
||||
${./agents-bulk/documentation.md}
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
# Code Reviewer Agent
|
||||
|
||||
You are a senior software engineer specializing in code reviews.
|
||||
Focus on code quality, security, and maintainability.
|
||||
@@ -0,0 +1,3 @@
|
||||
# Documentation Agent
|
||||
|
||||
You are a technical writer specializing in creating clear, comprehensive documentation.
|
||||
@@ -12,7 +12,8 @@
|
||||
- Review for potential bugs and edge cases
|
||||
- Check for security vulnerabilities
|
||||
- Ensure code follows best practices
|
||||
- Suggest improvements for readability and performance'';
|
||||
- Suggest improvements for readability and performance
|
||||
'';
|
||||
documentation = ''
|
||||
# Documentation Agent
|
||||
|
||||
@@ -23,7 +24,8 @@
|
||||
- Write clear, concise documentation
|
||||
- Include practical examples
|
||||
- Use proper formatting and structure
|
||||
- Consider the target audience'';
|
||||
- Consider the target audience
|
||||
'';
|
||||
};
|
||||
};
|
||||
nmt.script = ''
|
||||
|
||||
12
tests/modules/programs/opencode/api-client-tool.ts
Normal file
12
tests/modules/programs/opencode/api-client-tool.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Make API requests to external services",
|
||||
args: {
|
||||
endpoint: tool.schema.string().describe("API endpoint to call"),
|
||||
method: tool.schema.string().describe("HTTP method"),
|
||||
},
|
||||
async execute(args) {
|
||||
return `Called ${args.method} ${args.endpoint}`
|
||||
},
|
||||
})
|
||||
@@ -1,4 +1,4 @@
|
||||
# Update Changelog Command
|
||||
|
||||
Update CHANGELOG.md with a new entry for the specified version.
|
||||
Usage: /changelog [version] [change-type] [message]
|
||||
Usage: /changelog [version] [change-type] [message]
|
||||
|
||||
@@ -7,4 +7,4 @@ Focus on code quality, security, and maintainability.
|
||||
- Review for potential bugs and edge cases
|
||||
- Check for security vulnerabilities
|
||||
- Ensure code follows best practices
|
||||
- Suggest improvements for readability and performance
|
||||
- Suggest improvements for readability and performance
|
||||
|
||||
15
tests/modules/programs/opencode/commands-bulk-directory.nix
Normal file
15
tests/modules/programs/opencode/commands-bulk-directory.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
programs.opencode = {
|
||||
enable = true;
|
||||
commands = ./commands-bulk;
|
||||
};
|
||||
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.config/opencode/command/changelog.md
|
||||
assertFileExists home-files/.config/opencode/command/commit.md
|
||||
assertFileContent home-files/.config/opencode/command/changelog.md \
|
||||
${./commands-bulk/changelog.md}
|
||||
assertFileContent home-files/.config/opencode/command/commit.md \
|
||||
${./commands-bulk/commit.md}
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
# Update Changelog Command
|
||||
|
||||
Update CHANGELOG.md with a new entry for the specified version.
|
||||
Usage: /changelog [version] [change-type] [message]
|
||||
4
tests/modules/programs/opencode/commands-bulk/commit.md
Normal file
4
tests/modules/programs/opencode/commands-bulk/commit.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# Commit Command
|
||||
|
||||
Create a git commit with proper message formatting.
|
||||
Usage: /commit [message]
|
||||
@@ -6,12 +6,14 @@
|
||||
# Update Changelog Command
|
||||
|
||||
Update CHANGELOG.md with a new entry for the specified version.
|
||||
Usage: /changelog [version] [change-type] [message]'';
|
||||
Usage: /changelog [version] [change-type] [message]
|
||||
'';
|
||||
commit = ''
|
||||
# Commit Command
|
||||
|
||||
Create a git commit with proper message formatting.
|
||||
Usage: /commit [message]'';
|
||||
Usage: /commit [message]
|
||||
'';
|
||||
};
|
||||
};
|
||||
nmt.script = ''
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Commit Command
|
||||
|
||||
Create a git commit with proper message formatting.
|
||||
Usage: /commit [message]
|
||||
Usage: /commit [message]
|
||||
|
||||
11
tests/modules/programs/opencode/database-query-tool.ts
Normal file
11
tests/modules/programs/opencode/database-query-tool.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
|
||||
export default tool({
|
||||
description: "Query the project database",
|
||||
args: {
|
||||
query: tool.schema.string().describe("SQL query to execute"),
|
||||
},
|
||||
async execute(args) {
|
||||
return `Executed query: ${args.query}`
|
||||
},
|
||||
})
|
||||
@@ -8,6 +8,11 @@
|
||||
opencode-commands-inline = ./commands-inline.nix;
|
||||
opencode-agents-path = ./agents-path.nix;
|
||||
opencode-commands-path = ./commands-path.nix;
|
||||
opencode-agents-bulk-directory = ./agents-bulk-directory.nix;
|
||||
opencode-commands-bulk-directory = ./commands-bulk-directory.nix;
|
||||
opencode-tools-inline = ./tools-inline.nix;
|
||||
opencode-tools-path = ./tools-path.nix;
|
||||
opencode-tools-bulk-directory = ./tools-bulk-directory.nix;
|
||||
opencode-mixed-content = ./mixed-content.nix;
|
||||
opencode-skills-inline = ./skills-inline.nix;
|
||||
opencode-skills-path = ./skills-path.nix;
|
||||
@@ -15,6 +20,7 @@
|
||||
opencode-skills-bulk-directory = ./skills-bulk-directory.nix;
|
||||
opencode-themes-inline = ./themes-inline.nix;
|
||||
opencode-themes-path = ./themes-path.nix;
|
||||
opencode-themes-bulk-directory = ./themes-bulk-directory.nix;
|
||||
opencode-mcp-integration = ./mcp-integration.nix;
|
||||
opencode-mcp-integration-with-override = ./mcp-integration-with-override.nix;
|
||||
}
|
||||
|
||||
@@ -7,4 +7,4 @@ Focus on user-friendly explanations and examples.
|
||||
- Write clear, concise documentation
|
||||
- Include practical examples
|
||||
- Use proper formatting and structure
|
||||
- Consider the target audience
|
||||
- Consider the target audience
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user