Merge branch 'master' into fix/4221

This commit is contained in:
Leah Amelia Chen 2023-11-24 10:29:16 +01:00 committed by GitHub
commit 9837165d5f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
45 changed files with 553 additions and 116 deletions

View File

@ -15,3 +15,11 @@ updates:
interval: "weekly"
commit-message:
prefix: "ci:"
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "release-23.11"
schedule:
interval: "weekly"
commit-message:
prefix: "ci:"

View File

@ -1 +0,0 @@
23.11

View File

@ -28,7 +28,7 @@ Releases
Home Manager is developed against `nixpkgs-unstable` branch, which often causes
it to contain tweaks for changes/packages not yet released in stable [NixOS][].
To avoid breaking users' configurations, Home Manager is released in branches
corresponding to NixOS releases (e.g. `release-23.05`). These branches get
corresponding to NixOS releases (e.g. `release-23.11`). These branches get
fixes, but usually not new modules. If you need a module to be backported, then
feel free to open an issue.
@ -49,7 +49,7 @@ dconf store and cannot tell whether a configuration that it is about to be
overwritten was from a previous Home Manager generation or from manual
configuration.
Home Manager targets [NixOS][] unstable and NixOS version 23.05 (the current
Home Manager targets [NixOS][] unstable and NixOS version 23.11 (the current
stable version), it may or may not work on other Linux distributions and NixOS
versions.

View File

@ -58,11 +58,11 @@ $ nix-channel --add https://github.com/nix-community/home-manager/archive/master
$ nix-channel --update
----
+
and if you follow a Nixpkgs version 23.05 channel you can run
and if you follow a Nixpkgs version 23.11 channel you can run
+
[source,console]
----
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-23.05.tar.gz home-manager
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-23.11.tar.gz home-manager
$ nix-channel --update
----
@ -130,11 +130,11 @@ $ sudo nix-channel --add https://github.com/nix-community/home-manager/archive/m
$ sudo nix-channel --update
----
and if you follow a Nixpkgs version 23.05 channel, you can run
and if you follow a Nixpkgs version 23.11 channel, you can run
[source,console]
----
$ sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-23.05.tar.gz home-manager
$ sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-23.11.tar.gz home-manager
$ sudo nix-channel --update
----
@ -158,7 +158,7 @@ home-manager.users.eve = { pkgs, ... }: {
# The state version is required and should stay at the version you
# originally installed.
home.stateVersion = "23.05";
home.stateVersion = "23.11";
};
----
@ -254,11 +254,11 @@ $ nix-channel --add https://github.com/nix-community/home-manager/archive/master
$ nix-channel --update
----
and if you follow a Nixpkgs version 23.05 channel, you can run
and if you follow a Nixpkgs version 23.11 channel, you can run
[source,console]
----
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-23.05.tar.gz home-manager
$ nix-channel --add https://github.com/nix-community/home-manager/archive/release-23.11.tar.gz home-manager
$ nix-channel --update
----
@ -285,7 +285,7 @@ home-manager.users.eve = { pkgs, ... }: {
# The state version is required and should stay at the version you
# originally installed.
home.stateVersion = "23.05";
home.stateVersion = "23.11";
};
----

View File

@ -79,10 +79,10 @@ then to generate and activate a basic configuration run the command
[source,console]
$ nix run home-manager/master -- init --switch
For Nixpkgs or NixOS version 23.05 run
For Nixpkgs or NixOS version 23.11 run
[source,console]
$ nix run home-manager/release-23.05 -- init --switch
$ nix run home-manager/release-23.11 -- init --switch
This will generate a `flake.nix` and a `home.nix` file in
`~/.config/home-manager`, creating the directory if it does not exist.
@ -97,7 +97,7 @@ $ # Edit files in ~/.config/home-manager
$ nix run home-manager/$branch -- init --switch
----
Where `$branch` is one of `master` or `release-23.05`.
Where `$branch` is one of `master` or `release-23.11`.
After the initial activation has completed successfully then building
and activating your flake-based configuration is as simple as

View File

@ -6,6 +6,8 @@ This section lists the release notes for stable versions of Home Manager and the
:leveloffset: 1
include::rl-2405.adoc[]
include::rl-2311.adoc[]
include::rl-2305.adoc[]

View File

@ -1,7 +1,7 @@
[[sec-release-23.11]]
== Release 23.11
This is the current unstable branch and the information in this section is therefore not final.
The 23.11 release branch became stable in November, 2023.
[[sec-release-23.11-highlights]]
=== Highlights

View File

@ -0,0 +1,20 @@
[[sec-release-24.05]]
== Release 24.05
This is the current unstable branch and the information in this section is therefore not final.
[[sec-release-24.05-highlights]]
=== Highlights
This release has the following notable changes:
* The `.release` file in the Home Manager project root has been removed.
Please use the `release.json` file instead.
[[sec-release-24.05-state-version-changes]]
=== State Version Changes
The state version in this release includes the changes below.
These changes are only active if the `home.stateVersion` option is set to "24.05" or later.
* Nothing, yet.

View File

@ -59,7 +59,7 @@ A fresh install of Home Manager will generate a minimal `~/.config/home-manager/
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "23.05";
home.stateVersion = "23.11";
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
@ -99,7 +99,7 @@ To satisfy the above setup we should elaborate the `home.nix` file as follows:
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "23.05";
home.stateVersion = "23.11";
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;

View File

@ -2,11 +2,11 @@
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1697456312,
"narHash": "sha256-roiSnrqb5r+ehnKCauPLugoU8S36KgmWraHgRqVYndo=",
"lastModified": 1700204040,
"narHash": "sha256-xSVcS5HBYnD3LTer7Y2K8ZQCDCXMa3QUD1MzRjHzuhI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ca012a02bf8327be9e488546faecae5e05d7d749",
"rev": "c757e9bd77b16ca2e03c89bf8bc9ecb28e0c06ad",
"type": "github"
},
"original": {

View File

@ -359,7 +359,7 @@ $xdgVars
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "23.05"; # Please read the comment before changing.
home.stateVersion = "23.11"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
@ -397,8 +397,10 @@ $xdgVars
# '';
};
# You can also manage environment variables but you will have to manually
# source
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. If you don't want to manage your shell through Home
# Manager then you have to manually source 'hm-session-vars.sh' located at
# either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
@ -406,7 +408,6 @@ $xdgVars
#
# /etc/profiles/per-user/$USER/etc/profile.d/hm-session-vars.sh
#
# if you don't want to manage your shell through Home Manager.
home.sessionVariables = {
# EDITOR = "emacs";
};

View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Home Manager\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2023-09-13 23:46+0200\n"
"PO-Revision-Date: 2023-06-17 07:49+0000\n"
"Last-Translator: Pink Pony <dreammc@protonmail.com>\n"
"PO-Revision-Date: 2023-11-17 08:06+0000\n"
"Last-Translator: \"Julien H. Gibson\" <julienhgibson@protonmail.com>\n"
"Language-Team: French <https://hosted.weblate.org/projects/home-manager/cli/"
"fr/>\n"
"Language: fr\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.18.1\n"
"X-Generator: Weblate 5.2\n"
#: home-manager/home-manager:81
msgid "No configuration file found at %s"
@ -42,7 +42,7 @@ msgstr ""
#: home-manager/home-manager:124
msgid "Home Manager not found at %s."
msgstr ""
msgstr "Home Manager n'a pas été trouvé à l'emplacement %s."
#. translators: This message will be seen by very few users that likely are familiar with English. So feel free to leave this untranslated.
#: home-manager/home-manager:132
@ -50,6 +50,8 @@ msgid ""
"The fallback Home Manager path %s has been deprecated and a file/directory "
"was found there."
msgstr ""
"Le chemin d'accès de secours vers Home Manager %s est obsolète et un fichier/"
"dossier y a été trouvé."
#. translators: This message will be seen by very few users that likely are familiar with English. So feel free to leave this untranslated.
#: home-manager/home-manager:135
@ -72,6 +74,25 @@ msgid ""
"\n"
" $ rm -r \"%s\""
msgstr ""
"Pour enlever cet avertissement, faites l'une des manipulations suivantes.\n"
"\n"
"1. Dire explicitement à Home Manager d'utiliser le path, par exemple en "
"ajoutant\n"
"\n"
" { programs.home-manager.path = \"%s\"; }\n"
"\n"
" à votre configuration.\n"
"\n"
" Si vous importez directement Home Manager, vous pouvez utiliser le "
"paramètre `path`\n"
"\n"
" pkgs.callPackage /path/to/home-manager-package { path = \"%s\"; }\n"
"\n"
" lorsque vous appelez le package Home Manager.\n"
"\n"
"2. Supprimer le path obsolète.\n"
"\n"
" $ rm -r \"%s\""
#: home-manager/home-manager:174
msgid "Could not find suitable profile directory, tried %s and %s"
@ -80,12 +101,12 @@ msgstr "Impossible de trouver le dossier de profil approprié, essayé %s et %s"
#. translators: Here "flake" is a noun that refers to the Nix Flakes feature.
#: home-manager/home-manager:229
msgid "Can't inspect options of a flake configuration"
msgstr "Impossible d'inspecter les options d'une configuration en flocons"
msgstr "Impossible d'inspecter les options de la configuration d'un flake"
#: home-manager/home-manager:291 home-manager/home-manager:314
#: home-manager/home-manager:1034
msgid "%s: unknown option '%s'"
msgstr "%s : option inconnue « %s »"
msgstr "%s : option inconnue '%s'"
#: home-manager/home-manager:296 home-manager/home-manager:1035
msgid "Run '%s --help' for usage help"
@ -158,7 +179,7 @@ msgstr[1] ""
#: home-manager/home-manager:576
msgid "Unknown \"news.display\" setting \"%s\"."
msgstr "Configuration \"news.display\" iconnue \"%s\"."
msgstr "Configuration \"news.display\" inconnue \"%s\"."
#: home-manager/home-manager:583
#, sh-format
@ -171,7 +192,7 @@ msgstr "Impossible de lancer une compilation dans un dossier en écriture seule"
#: home-manager/home-manager:676
msgid "No generation with ID %s"
msgstr "Aucune génération avec l'identifiant %s"
msgstr "Aucune génération avec l'ID %s"
#: home-manager/home-manager:678
msgid "Cannot remove the current generation %s"
@ -187,11 +208,11 @@ msgstr "Aucune génération expirée"
#: home-manager/home-manager:710
msgid "No home-manager packages seem to be installed."
msgstr "Aucun paquet home-manager ne semble être installé."
msgstr "Aucun package home-manager ne semble être installé."
#: home-manager/home-manager:792
msgid "Unknown argument %s"
msgstr "Aucun argument %s"
msgstr "Argument inconnu %s"
#: home-manager/home-manager:816
msgid "This will remove Home Manager from your system."

View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Home Manager\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2023-09-13 23:46+0200\n"
"PO-Revision-Date: 2023-04-11 20:41+0000\n"
"Last-Translator: Robert Helgesson <robert@rycee.net>\n"
"PO-Revision-Date: 2023-11-12 11:01+0000\n"
"Last-Translator: Frankie McEyes <mceyes@protonmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/home-manager/cli/"
"it/>\n"
"Language: it\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17-dev\n"
"X-Generator: Weblate 5.2-dev\n"
#: home-manager/home-manager:81
msgid "No configuration file found at %s"
@ -72,6 +72,7 @@ msgstr ""
#: home-manager/home-manager:174
msgid "Could not find suitable profile directory, tried %s and %s"
msgstr ""
"Impossibile trovare la directory del profilo adatta, si è provato con %s e %s"
#. translators: Here "flake" is a noun that refers to the Nix Flakes feature.
#: home-manager/home-manager:229

View File

@ -29,7 +29,7 @@ in {
QT_IM_MODULE = "fcitx";
XMODIFIERS = "@im=fcitx";
QT_PLUGIN_PATH =
"${fcitx5Package}/${pkgs.qt6.qtbase.qtPluginPrefix}:\${QT_PLUGIN_PATH}";
"$QT_PLUGIN_PATH\${QT_PLUGIN_PATH:+:}${fcitx5Package}/${pkgs.qt6.qtbase.qtPluginPrefix}";
};
systemd.user.services.fcitx5-daemon = {

View File

@ -414,6 +414,11 @@
keys =
[{ fingerprint = "75F0 AB7C FE01 D077 AEE6 CAFD 353E 4A18 EE0F AB72"; }];
};
tensor5 = {
github = "tensor5";
githubId = 1545895;
name = "Nicola Squartini";
};
toastal = {
email = "toastal+nix@posteo.net";
matrix = "@toastal:matrix.org";

View File

@ -1116,7 +1116,7 @@ in
can control it by using the `qt5ct` and `qt6ct` applications;
- `qt.style.name = "kvantum"`: override the style by using themes
written in SVG. Supports many popular themes.
'';
'';
}
{
@ -1274,6 +1274,13 @@ in
'';
}
{
time = "2023-10-04T18:35:42+00:00";
message = ''
A new module is available: 'programs.openstackclient'.
'';
}
{
time = "2023-10-17T06:33:24+00:00";
condition = hostPlatform.isLinux;
@ -1312,6 +1319,12 @@ in
Please migrate to the new option to suppress the generated warning.
'';
}
{
time = "2023-11-22T22:42:16+00:00";
message = ''
A new module is available: 'programs.ruff'.
'';
}
];
};
}

View File

@ -1,25 +1,37 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.qt;
# Map platform names to their packages.
platformPackages = with pkgs; {
gnome = [ qgnomeplatform qgnomeplatform-qt6 ];
gtk = [ libsForQt5.qtstyleplugins qt6Packages.qt6gtk2 ];
kde = [ libsForQt5.plasma-integration libsForQt5.systemsettings ];
lxqt = [ lxqt.lxqt-qtplugin lxqt.lxqt-config ];
qtct = [ libsForQt5.qt5ct qt6Packages.qt6ct ];
};
# Maps style names to their QT_QPA_PLATFORMTHEME, if necessary.
styleNames = {
gtk = "gtk2";
qtct = "qt5ct";
};
# Maps known lowercase style names to style packages. Non-exhaustive.
stylePackages = with pkgs; {
bb10bright = libsForQt5.qtstyleplugins;
bb10dark = libsForQt5.qtstyleplugins;
cleanlooks = libsForQt5.qtstyleplugins;
gtk2 = libsForQt5.qtstyleplugins;
gtk2 = [ libsForQt5.qtstyleplugins qt6Packages.qt6gtk2 ];
motif = libsForQt5.qtstyleplugins;
cde = libsForQt5.qtstyleplugins;
plastique = libsForQt5.qtstyleplugins;
adwaita = adwaita-qt;
adwaita-dark = adwaita-qt;
adwaita-highcontrast = adwaita-qt;
adwaita-highcontrastinverse = adwaita-qt;
adwaita = [ adwaita-qt adwaita-qt6 ];
adwaita-dark = [ adwaita-qt adwaita-qt6 ];
adwaita-highcontrast = [ adwaita-qt adwaita-qt6 ];
adwaita-highcontrastinverse = [ adwaita-qt adwaita-qt6 ];
breeze = libsForQt5.breeze-qt5;
@ -28,29 +40,37 @@ let
};
in {
meta.maintainers = with maintainers; [ rycee thiagokokada ];
meta.maintainers = with lib.maintainers; [ rycee thiagokokada ];
imports = [
(mkChangedOptionModule [ "qt" "useGtkTheme" ] [ "qt" "platformTheme" ]
(lib.mkChangedOptionModule [ "qt" "useGtkTheme" ] [ "qt" "platformTheme" ]
(config:
if getAttrFromPath [ "qt" "useGtkTheme" ] config then "gtk" else null))
if lib.getAttrFromPath [ "qt" "useGtkTheme" ] config then
"gtk"
else
null))
];
options = {
qt = {
enable = mkEnableOption "Qt 4, 5 and 6 configuration";
enable = lib.mkEnableOption "Qt 5 and 6 configuration";
platformTheme = mkOption {
type = types.nullOr (types.enum [ "gtk" "gnome" "qtct" "kde" ]);
platformTheme = lib.mkOption {
type = with lib.types;
nullOr (enum [ "gtk" "gtk3" "gnome" "lxqt" "qtct" "kde" ]);
default = null;
example = "gnome";
relatedPackages = [
"qgnomeplatform"
[ "libsForQt5" "qtstyleplugins" ]
[ "libsForQt5" "qt5ct" ]
[ "qt6Packages" "qt6ct" ]
"qgnomeplatform-qt6"
[ "libsForQt5" "plasma-integration" ]
[ "libsForQt5" "qt5ct" ]
[ "libsForQt5" "qtstyleplugins" ]
[ "libsForQt5" "systemsettings" ]
[ "lxqt" "lxqt-config" ]
[ "lxqt" "lxqt-qtplugin" ]
[ "qt6Packages" "qt6ct" ]
[ "qt6Packages" "qt6gtk2" ]
];
description = ''
Platform theme to use for Qt applications.
@ -61,10 +81,19 @@ in {
: Use GTK theme with
[`qtstyleplugins`](https://github.com/qt/qtstyleplugins)
`gtk3`
: Use [GTK3 integration](https://github.com/qt/qtbase/tree/dev/src/plugins/platformthemes/gtk3)
for file picker dialogs, font and theme configuration
`gnome`
: Use GNOME theme with
[`qgnomeplatform`](https://github.com/FedoraQt/QGnomePlatform)
`lxqt`
: Use LXQt theme style set using the
[`lxqt-config-appearance`](https://github.com/lxqt/lxqt-config)
application
`qtct`
: Use Qt style set using
[`qt5ct`](https://github.com/desktop-app/qt5ct)
@ -77,15 +106,17 @@ in {
};
style = {
name = mkOption {
type = types.nullOr types.str;
name = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
example = "adwaita-dark";
relatedPackages = [
"adwaita-qt"
"adwaita-qt6"
[ "libsForQt5" "breeze-qt5" ]
[ "libsForQt5" "qtstyleplugins" ]
[ "libsForQt5" "qtstyleplugin-kvantum" ]
[ "libsForQt5" "qtstyleplugins" ]
[ "qt6Packages" "qt6gtk2" ]
[ "qt6Packages" "qtstyleplugin-kvantum" ]
];
description = ''
@ -111,10 +142,10 @@ in {
'';
};
package = mkOption {
type = with types; nullOr (either package (listOf package));
package = lib.mkOption {
type = with lib.types; nullOr (either package (listOf package));
default = null;
example = literalExpression "pkgs.adwaita-qt";
example = lib.literalExpression "pkgs.adwaita-qt";
description = ''
Theme package to be used in Qt5/Qt6 applications.
Auto-detected from {option}`qt.style.name` if possible.
@ -127,17 +158,28 @@ in {
config = let
# Necessary because home.sessionVariables doesn't support mkIf
envVars = filterAttrs (n: v: v != null) {
QT_QPA_PLATFORMTHEME = if cfg.platformTheme == "gtk" then
"gtk2"
else if cfg.platformTheme == "qtct" then
"qt5ct"
envVars = lib.filterAttrs (n: v: v != null) {
QT_QPA_PLATFORMTHEME = if (cfg.platformTheme != null) then
styleNames.${cfg.platformTheme} or cfg.platformTheme
else
cfg.platformTheme;
null;
QT_STYLE_OVERRIDE = cfg.style.name;
};
in mkIf (cfg.enable && cfg.platformTheme != null) {
envVarsExtra = let
inherit (config.home) profileDirectory;
qtVersions = with pkgs; [ qt5 qt6 ];
makeQtPath = prefix:
lib.concatStringsSep ":"
(map (qt: "${profileDirectory}/${qt.qtbase.${prefix}}") qtVersions);
in {
QT_PLUGIN_PATH = "$QT_PLUGIN_PATH\${QT_PLUGIN_PATH:+:}"
+ (makeQtPath "qtPluginPrefix");
QML2_IMPORT_PATH = "$QML2_IMPORT_PATH\${QML2_IMPORT_PATH:+:}"
+ (makeQtPath "qtQmlPrefix");
};
in lib.mkIf cfg.enable {
assertions = [{
assertion = cfg.platformTheme == "gnome" -> cfg.style.name != null
&& cfg.style.package != null;
@ -147,37 +189,32 @@ in {
'';
}];
qt.style.package = mkIf (cfg.style.name != null)
(mkDefault (stylePackages.${toLower cfg.style.name} or null));
qt.style.package = lib.mkIf (cfg.style.name != null)
(lib.mkDefault (stylePackages.${lib.toLower cfg.style.name} or null));
home.sessionVariables = envVars;
home = {
sessionVariables = envVars;
# home.sessionVariables does not support setting the same environment
# variable to different values.
# Since some other modules may set the QT_PLUGIN_PATH or QML2_IMPORT_PATH
# to their own value, e.g.: fcitx5, we avoid conflicts by setting
# the values in home.sessionVariablesExtra instead.
sessionVariablesExtra = ''
export QT_PLUGIN_PATH=${envVarsExtra.QT_PLUGIN_PATH}
export QML2_IMPORT_PATH=${envVarsExtra.QML2_IMPORT_PATH}
'';
};
# Apply theming also to apps started by systemd.
systemd.user.sessionVariables = envVars;
systemd.user.sessionVariables = envVars // envVarsExtra;
home.packages = (if cfg.platformTheme == "gnome" then
[ pkgs.qgnomeplatform ]
else if cfg.platformTheme == "qtct" then [
pkgs.libsForQt5.qt5ct
pkgs.qt6Packages.qt6ct
] else if cfg.platformTheme == "kde" then [
pkgs.libsForQt5.plasma-integration
pkgs.libsForQt5.systemsettings
] else
[ pkgs.libsForQt5.qtstyleplugins ])
++ lib.optionals (cfg.style.package != null)
(lib.toList cfg.style.package);
home.packages = (lib.optionals (cfg.platformTheme != null)
platformPackages.${cfg.platformTheme} or [ ])
++ (lib.optionals (cfg.style.package != null)
(lib.toList cfg.style.package));
xsession.importedVariables = [ "QT_QPA_PLATFORMTHEME" ]
xsession.importedVariables = [ "QT_PLUGIN_PATH" "QML2_IMPORT_PATH" ]
++ lib.optionals (cfg.platformTheme != null) [ "QT_QPA_PLATFORMTHEME" ]
++ lib.optionals (cfg.style.name != null) [ "QT_STYLE_OVERRIDE" ];
# Enable GTK+ style for Qt4 in Gtk/GNOME.
# It doesnt support the platform theme packages.
home.activation.useGtkThemeInQt4 =
mkIf (cfg.platformTheme == "gtk" || cfg.platformTheme == "gnome")
(hm.dag.entryAfter [ "writeBoundary" ] ''
$DRY_RUN_CMD ${pkgs.crudini}/bin/crudini $VERBOSE_ARG \
--set "${config.xdg.configHome}/Trolltech.conf" Qt style GTK+
'');
};
}

View File

@ -165,6 +165,7 @@ let
./programs/offlineimap.nix
./programs/oh-my-posh.nix
./programs/opam.nix
./programs/openstackclient.nix
./programs/pandoc.nix
./programs/papis.nix
./programs/password-store.nix
@ -189,6 +190,7 @@ let
./programs/rofi.nix
./programs/rtorrent.nix
./programs/rtx.nix
./programs/ruff.nix
./programs/sagemath.nix
./programs/sbt.nix
./programs/scmpuff.nix

View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Home Manager Modules\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2023-09-13 23:46+0200\n"
"PO-Revision-Date: 2022-12-15 08:50+0000\n"
"Last-Translator: Walter Franzini <walter.franzini@gmail.com>\n"
"PO-Revision-Date: 2023-11-12 11:01+0000\n"
"Last-Translator: Frankie McEyes <mceyes@protonmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/home-manager/"
"modules/it/>\n"
"Language: it\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.15-dev\n"
"X-Generator: Weblate 5.2-dev\n"
#: modules/files.nix:234
msgid "Creating home file links in %s"
@ -51,6 +51,19 @@ msgid ""
"\n"
"Then try activating your Home Manager configuration again."
msgstr ""
"Ops, Nix non è riuscito a installare il nuovo profilo di Home Manager!\n"
"\n"
"Forse c'è un conflitto con un pacchetto che è stato installato utilizzando "
"il file\n"
"\"%s\"? Provate ad eseguire\n"
"\n"
" %s\n"
"\n"
"e se ci fosse un pacchetto in conflitto, potete rimuoverlo con\n"
"\n"
" %s\n"
"\n"
"Quindi provare ad attivare nuovamente la configurazione di Home Manager."
#: modules/home-environment.nix:673
msgid "Activating %s"
@ -58,11 +71,12 @@ msgstr "Attivando %s"
#: modules/lib-bash/activation-init.sh:22
msgid "Migrating profile from %s to %s"
msgstr ""
msgstr "Migrazione del profilo da %s a %s"
#: modules/lib-bash/activation-init.sh:53
msgid "Could not find suitable profile directory, tried %s and %s"
msgstr ""
"Impossibile trovare la directory del profilo adatta, si è provato con %s e %s"
#: modules/lib-bash/activation-init.sh:81
msgid "Sanity checking oldGenNum and oldGenPath"
@ -98,11 +112,11 @@ msgstr ""
#: modules/lib-bash/activation-init.sh:95
msgid "Error: USER is set to \"%s\" but we expect \"%s\""
msgstr ""
msgstr "Errore: USER è impostato su \"%s\" ma era previsto \"%s\""
#: modules/lib-bash/activation-init.sh:104
msgid "Error: HOME is set to \"%s\" but we expect \"%s\""
msgstr ""
msgstr "Errore: HOME è impostata su \"%s\" ma era previsto un valore di \"%s\""
#: modules/lib-bash/activation-init.sh:119
msgid "Starting Home Manager activation"

View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Home Manager Modules\n"
"Report-Msgid-Bugs-To: https://github.com/nix-community/home-manager/issues\n"
"POT-Creation-Date: 2023-09-13 23:46+0200\n"
"PO-Revision-Date: 2023-10-19 04:00+0000\n"
"Last-Translator: Emre Çebi <emrecebi03@gmail.com>\n"
"PO-Revision-Date: 2023-11-13 17:06+0000\n"
"Last-Translator: Oğuz Ersen <oguz@ersen.moe>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/home-manager/"
"modules/tr/>\n"
"Language: tr\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.1\n"
"X-Generator: Weblate 5.2-dev\n"
#: modules/files.nix:234
msgid "Creating home file links in %s"
@ -111,11 +111,11 @@ msgstr ""
#: modules/lib-bash/activation-init.sh:95
msgid "Error: USER is set to \"%s\" but we expect \"%s\""
msgstr ""
msgstr "Hata: USER \"%s\" olarak ayarlandı ancak biz \"%s\" bekliyoruz"
#: modules/lib-bash/activation-init.sh:104
msgid "Error: HOME is set to \"%s\" but we expect \"%s\""
msgstr ""
msgstr "Hata: HOME \"%s\" olarak ayarlandı ancak biz \"%s\" bekliyoruz"
#: modules/lib-bash/activation-init.sh:119
msgid "Starting Home Manager activation"

View File

@ -8,10 +8,20 @@ let
package = pkgs.bat;
toConfigFile = generators.toKeyValue {
mkKeyValue = k: v: "--${k}=${lib.escapeShellArg v}";
listsAsDuplicateKeys = true;
};
toConfigFile = attrs:
let
inherit (builtins) isBool attrNames;
nonBoolFlags = filterAttrs (_: v: !(isBool v)) attrs;
enabledBoolFlags = filterAttrs (_: v: isBool v && v) attrs;
keyValuePairs = generators.toKeyValue {
mkKeyValue = k: v: "--${k}=${lib.escapeShellArg v}";
listsAsDuplicateKeys = true;
} nonBoolFlags;
switches = concatMapStrings (k: ''
--${k}
'') (attrNames enabledBoolFlags);
in keyValuePairs + switches;
in {
meta.maintainers = [ ];
@ -20,7 +30,7 @@ in {
enable = mkEnableOption "bat, a cat clone with wings";
config = mkOption {
type = with types; attrsOf (either str (listOf str));
type = with types; attrsOf (oneOf [ str (listOf str) bool ]);
default = { };
example = {
theme = "TwoDark";

View File

@ -169,7 +169,10 @@ let
else if isDarwin then
package
else if versionAtLeast config.home.stateVersion "19.09" then
package.override (old: { cfg = old.cfg or { } // fcfg; })
package.override (old: {
cfg = old.cfg or { } // fcfg;
extraPolicies = cfg.policies;
})
else
(pkgs.wrapFirefox.override { config = bcfg; }) package { };
@ -230,6 +233,17 @@ in {
description = "Resulting Firefox package.";
};
policies = mkOption {
type = types.attrsOf jsonFormat.type;
default = { };
description =
"[See list of policies](https://mozilla.github.io/policy-templates/).";
example = {
DefaultDownloadDirectory = "\${home}/Downloads";
BlockAboutConfig = true;
};
};
profiles = mkOption {
type = types.attrsOf (types.submodule ({ config, name, ... }: {
options = {

View File

@ -0,0 +1,73 @@
{ config, lib, pkgs, ... }:
let
cfg = config.programs.openstackclient;
yamlFormat = pkgs.formats.yaml { };
in {
meta.maintainers = [ lib.hm.maintainers.tensor5 ];
options.programs.openstackclient = {
enable = lib.mkEnableOption "OpenStack command-line client";
package = lib.mkPackageOption pkgs "openstackclient" { };
clouds = lib.mkOption {
type = lib.types.submodule { freeformType = yamlFormat.type; };
default = { };
example = lib.literalExpression ''
{
my-infra = {
cloud = "example-cloud";
auth = {
project_id = "0123456789abcdef0123456789abcdef";
username = "openstack";
};
region_name = "XXX";
interface = "internal";
};
}
'';
description = ''
Configuration needed to connect to one or more clouds.
Do not include passwords here as they will be publicly readable in the Nix store.
Configuration written to {file}`$XDG_CONFIG_HOME/openstack/clouds.yaml`.
See <https://docs.openstack.org/python-openstackclient/latest/configuration/index.html#clouds-yaml>.
'';
};
publicClouds = lib.mkOption {
type = lib.types.submodule { freeformType = yamlFormat.type; };
default = { };
example = lib.literalExpression ''
{
example-cloud = {
auth = {
auth_url = "https://identity.cloud.example.com/v2.0";
};
};
};
'';
description = ''
Public information about clouds.
Configuration written to {file}`$XDG_CONFIG_HOME/openstack/clouds-public.yaml`.
See <https://docs.openstack.org/python-openstackclient/latest/configuration/index.html#clouds-public-yaml>.
'';
};
};
config = lib.mkIf cfg.enable {
home.packages = [ cfg.package ];
xdg.configFile."openstack/clouds.yaml".source = yamlFormat.generate
"openstackclient-clouds-yaml-${config.home.username}" {
clouds = cfg.clouds;
};
xdg.configFile."openstack/clouds-public.yaml".source = yamlFormat.generate
"openstackclient-clouds-public-yaml-${config.home.username}" {
public-clouds = cfg.publicClouds;
};
};
}

45
modules/programs/ruff.nix Normal file
View File

@ -0,0 +1,45 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.ruff;
settingsFormat = pkgs.formats.toml { };
in {
meta.maintainers = [ hm.maintainers.GaetanLepage ];
options.programs.ruff = {
enable = mkEnableOption
"ruff, an extremely fast Python linter and code formatter, written in Rust";
package = mkPackageOption pkgs "ruff" { };
settings = mkOption {
type = settingsFormat.type;
example = lib.literalExpression ''
{
line-length = 100;
per-file-ignores = { "__init__.py" = [ "F401" ]; };
lint = {
select = [ "E4" "E7" "E9" "F" ];
ignore = [ ];
};
}
'';
description = ''
Ruff configuration.
For available settings see <https://docs.astral.sh/ruff/settings>.
'';
};
};
config = mkIf cfg.enable {
home.packages = [ cfg.package ];
xdg.configFile."ruff/ruff.toml".source =
settingsFormat.generate "ruff.toml" cfg.settings;
};
}

View File

@ -226,9 +226,20 @@ let
package = mkPackageOption pkgs "zsh-syntax-highlighting" { };
highlighters = mkOption {
type = types.listOf types.str;
default = [ ];
example = [ "brackets" ];
description = ''
Highlighters to enable
See the list of highlighters: <https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md>
'';
};
styles = mkOption {
type = types.attrsOf types.str;
default = {};
example = { comment = "fg=black,bold"; };
description = ''
Custom styles for syntax highlighting.
See each highlighter's options: <https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md>
@ -624,6 +635,7 @@ in
# https://github.com/zsh-users/zsh-syntax-highlighting#faq
''
source ${cfg.syntaxHighlighting.package}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
ZSH_HIGHLIGHT_HIGHLIGHTERS+=(${lib.concatStringsSep " " (map lib.escapeShellArg cfg.syntaxHighlighting.highlighters)})
${lib.concatStringsSep "\n" (
lib.mapAttrsToList
(name: value: "ZSH_HIGHLIGHT_STYLES+=(${lib.escapeShellArg name} ${lib.escapeShellArg value})")

View File

@ -5,7 +5,7 @@ let
inherit (lib)
boolToString concatMapStringsSep concatStringsSep escape literalExpression
mapAttrsToList mkEnableOption mkRenamedOptionModule mkRemovedOptionModule
mkDefault mkIf mkOption optional types warn;
mkDefault mkIf mkOption optional types warn getExe;
cfg = config.services.picom;
opt = options.services.picom;
@ -318,7 +318,7 @@ in {
Service = {
ExecStart = concatStringsSep " " ([
"${cfg.package}/bin/picom"
"${getExe cfg.package}"
"--config ${config.xdg.configFile."picom/picom.conf".source}"
] ++ cfg.extraArgs);
Restart = "always";

View File

@ -1,4 +1,4 @@
{
"release": "23.11",
"release": "24.05",
"isReleaseBranch": false
}

View File

@ -118,6 +118,7 @@ import nmt {
./modules/programs/nnn
./modules/programs/nushell
./modules/programs/oh-my-posh
./modules/programs/openstackclient
./modules/programs/pandoc
./modules/programs/papis
./modules/programs/pet
@ -132,6 +133,7 @@ import nmt {
./modules/programs/rio
./modules/programs/ripgrep
./modules/programs/rtx
./modules/programs/ruff
./modules/programs/sagemath
./modules/programs/sbt
./modules/programs/scmpuff

View File

@ -1,4 +1,6 @@
{
qt-basic = ./qt-basic.nix;
qt-platform-theme-gtk = ./qt-platform-theme-gtk.nix;
qt-platform-theme-gtk3 = ./qt-platform-theme-gtk3.nix;
qt-platform-theme-gnome = ./qt-platform-theme-gnome.nix;
}

View File

@ -0,0 +1,14 @@
{ config, lib, pkgs, ... }:
{
config = {
qt.enable = true;
nmt.script = ''
assertFileRegex home-path/etc/profile.d/hm-session-vars.sh \
'QT_PLUGIN_PATH'
assertFileRegex home-path/etc/profile.d/hm-session-vars.sh \
'QML2_IMPORT_PATH'
'';
};
}

View File

@ -15,6 +15,10 @@
'QT_QPA_PLATFORMTHEME="gnome"'
assertFileRegex home-path/etc/profile.d/hm-session-vars.sh \
'QT_STYLE_OVERRIDE="adwaita"'
assertFileRegex home-path/etc/profile.d/hm-session-vars.sh \
'QT_PLUGIN_PATH'
assertFileRegex home-path/etc/profile.d/hm-session-vars.sh \
'QML2_IMPORT_PATH'
'';
};
}

View File

@ -6,10 +6,15 @@
enable = true;
platformTheme = "gtk";
};
i18n.inputMethod.enabled = "fcitx5";
nmt.script = ''
assertFileRegex home-path/etc/profile.d/hm-session-vars.sh \
'QT_QPA_PLATFORMTHEME="gtk2"'
assertFileRegex home-path/etc/profile.d/hm-session-vars.sh \
'QT_PLUGIN_PATH'
assertFileRegex home-path/etc/profile.d/hm-session-vars.sh \
'QML2_IMPORT_PATH'
'';
};
}

View File

@ -0,0 +1,19 @@
{ config, lib, pkgs, ... }:
{
config = {
qt = {
enable = true;
platformTheme = "gtk3";
};
nmt.script = ''
assertFileRegex home-path/etc/profile.d/hm-session-vars.sh \
'QT_QPA_PLATFORMTHEME="gtk3"'
assertFileRegex home-path/etc/profile.d/hm-session-vars.sh \
'QT_PLUGIN_PATH'
assertFileRegex home-path/etc/profile.d/hm-session-vars.sh \
'QML2_IMPORT_PATH'
'';
};
}

View File

@ -11,6 +11,10 @@ with lib;
theme = "TwoDark";
pager = "less -FR";
map-syntax = [ "*.jenkinsfile:Groovy" "*.props:Java Properties" ];
show-all = true;
# False boolean options should not appear in the config
lessopen = false;
};
themes.testtheme.src = pkgs.writeText "testtheme.tmTheme" ''
@ -32,6 +36,7 @@ with lib;
--map-syntax='*.props:Java Properties'
--pager='less -FR'
--theme='TwoDark'
--show-all
''
}

View File

@ -4,4 +4,5 @@
firefox-deprecated-native-messenger = ./deprecated-native-messenger.nix;
firefox-duplicate-profile-ids = ./duplicate-profile-ids.nix;
firefox-duplicate-container-ids = ./duplicate-container-ids.nix;
firefox-policies = ./policies.nix;
}

View File

@ -0,0 +1,26 @@
{ config, lib, pkgs, ... }:
{
imports = [ ./setup-firefox-mock-overlay.nix ];
config = lib.mkIf config.test.enableBig {
home.stateVersion = "23.05";
programs.firefox = {
enable = true;
policies = { BlockAboutConfig = true; };
};
nmt.script = ''
jq=${lib.getExe pkgs.jq}
config_file="${config.programs.firefox.finalPackage}/lib/firefox/distribution/policies.json"
assertFileExists "$config_file"
blockAboutConfig_actual_value="$($jq ".policies.BlockAboutConfig" $config_file)"
if [[ $blockAboutConfig_actual_value != "true" ]]; then
fail "Expected '$config_file' to set 'policies.BlockAboutConfig' to true"
fi
'';
};
}

View File

@ -0,0 +1,4 @@
public-clouds:
example-cloud:
auth:
auth_url: https://identity.cloud.example.com/v2.0

View File

@ -0,0 +1,8 @@
clouds:
my-infra:
auth:
project_id: 0123456789abcdef0123456789abcdef
username: openstack
cloud: example-cloud
interface: internal
region_name: XXX

View File

@ -0,0 +1 @@
{ openstackclient = ./openstackclient.nix; }

View File

@ -0,0 +1,35 @@
{ ... }:
{
programs.openstackclient = {
enable = true;
clouds = {
my-infra = {
cloud = "example-cloud";
auth = {
project_id = "0123456789abcdef0123456789abcdef";
username = "openstack";
};
region_name = "XXX";
interface = "internal";
};
};
publicClouds = {
example-cloud = {
auth = { auth_url = "https://identity.cloud.example.com/v2.0"; };
};
};
};
test.stubs.openstackclient = { };
nmt.script = ''
assertFileExists home-files/.config/openstack/clouds.yaml
assertFileContent home-files/.config/openstack/clouds.yaml \
${./clouds.yaml}
assertFileExists home-files/.config/openstack/clouds-public.yaml
assertFileContent home-files/.config/openstack/clouds-public.yaml \
${./clouds-public.yaml}
'';
}

View File

@ -0,0 +1 @@
{ ruff-program = ./ruff.nix; }

View File

@ -0,0 +1,8 @@
line-length = 100
[lint]
ignore = []
select = ["E4", "E7", "E9", "F"]
[per-file-ignores]
"__init__.py" = ["F401"]

View File

@ -0,0 +1,23 @@
{ ... }:
{
programs.ruff = {
enable = true;
settings = {
line-length = 100;
per-file-ignores = { "__init__.py" = [ "F401" ]; };
lint = {
select = [ "E4" "E7" "E9" "F" ];
ignore = [ ];
};
};
};
test.stubs.ruff = { };
nmt.script = ''
assertFileExists home-files/.config/ruff/ruff.toml
assertFileContent home-files/.config/ruff/ruff.toml ${./expected.toml}
'';
}

View File

@ -9,6 +9,7 @@ with lib;
syntaxHighlighting = {
enable = true;
package = pkgs.hello;
highlighters = [ "brackets" "pattern" "cursor" ];
styles.comment = "fg=#6c6c6c";
};
};
@ -17,6 +18,7 @@ with lib;
nmt.script = ''
assertFileContains home-files/.zshrc "source ${pkgs.hello}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
assertFileContains home-files/.zshrc "ZSH_HIGHLIGHT_HIGHLIGHTERS+=('brackets' 'pattern' 'cursor')"
assertFileContains home-files/.zshrc "ZSH_HIGHLIGHT_STYLES+=('comment' 'fg=#6c6c6c')"
'';
};

View File

@ -2,7 +2,7 @@
WantedBy=graphical-session.target
[Service]
ExecStart=@picom@/bin/picom --config /nix/store/00000000000000000000000000000000-hm_picompicom.conf --legacy-backends
ExecStart=@picom@/bin/dummy --config /nix/store/00000000000000000000000000000000-hm_picompicom.conf --legacy-backends
Restart=always
RestartSec=3