Merge pull request #304773 from acid-bong/no-libs

treewide: remove file-wide `with lib;` uses in nixos/modules/programs
This commit is contained in:
Weijia Wang 2024-05-12 21:52:15 +02:00 committed by GitHub
commit 4433bbfd2a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
118 changed files with 1053 additions and 1269 deletions

View File

@ -1,7 +1,5 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.programs._1password-gui;
@ -9,25 +7,25 @@ let
in
{
imports = [
(mkRemovedOptionModule [ "programs" "_1password-gui" "gid" ] ''
(lib.mkRemovedOptionModule [ "programs" "_1password-gui" "gid" ] ''
A preallocated GID will be used instead.
'')
];
options = {
programs._1password-gui = {
enable = mkEnableOption "the 1Password GUI application";
enable = lib.mkEnableOption "the 1Password GUI application";
polkitPolicyOwners = mkOption {
type = types.listOf types.str;
polkitPolicyOwners = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
example = literalExpression ''["user1" "user2" "user3"]'';
example = lib.literalExpression ''["user1" "user2" "user3"]'';
description = ''
A list of users who should be able to integrate 1Password with polkit-based authentication mechanisms.
'';
};
package = mkPackageOption pkgs "1Password GUI" {
package = lib.mkPackageOption pkgs "1Password GUI" {
default = [ "_1password-gui" ];
};
};
@ -39,7 +37,7 @@ in
polkitPolicyOwners = cfg.polkitPolicyOwners;
};
in
mkIf cfg.enable {
lib.mkIf cfg.enable {
environment.systemPackages = [ package ];
users.groups.onepassword.gid = config.ids.gids.onepassword;

View File

@ -1,7 +1,5 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.programs._1password;
@ -9,22 +7,22 @@ let
in
{
imports = [
(mkRemovedOptionModule [ "programs" "_1password" "gid" ] ''
(lib.mkRemovedOptionModule [ "programs" "_1password" "gid" ] ''
A preallocated GID will be used instead.
'')
];
options = {
programs._1password = {
enable = mkEnableOption "the 1Password CLI tool";
enable = lib.mkEnableOption "the 1Password CLI tool";
package = mkPackageOption pkgs "1Password CLI" {
package = lib.mkPackageOption pkgs "1Password CLI" {
default = [ "_1password" ];
};
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
users.groups.onepassword-cli.gid = config.ids.gids.onepassword-cli;

View File

@ -1,16 +1,14 @@
{ config, lib, pkgs, ... }:
with lib;
{
meta.maintainers = [ maintainers.mic92 ];
meta.maintainers = [ lib.maintainers.mic92 ];
###### interface
options = {
programs.adb = {
enable = mkOption {
enable = lib.mkOption {
default = false;
type = types.bool;
type = lib.types.bool;
description = ''
Whether to configure system to use Android Debug Bridge (adb).
To grant access to a user, it must be part of adbusers group:
@ -21,7 +19,7 @@ with lib;
};
###### implementation
config = mkIf config.programs.adb.enable {
config = lib.mkIf config.programs.adb.enable {
services.udev.packages = [ pkgs.android-udev-rules ];
environment.systemPackages = [ pkgs.android-tools ];
users.groups.adbusers = {};

View File

@ -1,19 +1,17 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.programs.alvr;
in
{
options = {
programs.alvr = {
enable = mkEnableOption "ALVR, the VR desktop streamer";
enable = lib.mkEnableOption "ALVR, the VR desktop streamer";
package = mkPackageOption pkgs "alvr" { };
package = lib.mkPackageOption pkgs "alvr" { };
openFirewall = mkOption {
type = types.bool;
openFirewall = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to open the default ports in the firewall for the ALVR server.
@ -22,14 +20,14 @@ in
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
networking.firewall = mkIf cfg.openFirewall {
networking.firewall = lib.mkIf cfg.openFirewall {
allowedTCPPorts = [ 9943 9944 ];
allowedUDPPorts = [ 9943 9944 ];
};
};
meta.maintainers = with maintainers; [ passivelemon ];
meta.maintainers = with lib.maintainers; [ passivelemon ];
}

View File

@ -1,15 +1,13 @@
{ config, pkgs, lib, ... }:
with lib;
{
options = {
programs.appgate-sdp = {
enable = mkEnableOption "the AppGate SDP VPN client";
enable = lib.mkEnableOption "the AppGate SDP VPN client";
};
};
config = mkIf config.programs.appgate-sdp.enable {
config = lib.mkIf config.programs.appgate-sdp.enable {
boot.kernelModules = [ "tun" ];
environment.systemPackages = [ pkgs.appgate-sdp ];
services.dbus.packages = [ pkgs.appgate-sdp ];

View File

@ -2,8 +2,6 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.programs.atop;
in
@ -14,31 +12,31 @@ in
programs.atop = rec {
enable = mkEnableOption "Atop, a tool for monitoring system resources";
enable = lib.mkEnableOption "Atop, a tool for monitoring system resources";
package = mkPackageOption pkgs "atop" { };
package = lib.mkPackageOption pkgs "atop" { };
netatop = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to install and enable the netatop kernel module.
Note: this sets the kernel taint flag "O" for loading out-of-tree modules.
'';
};
package = mkOption {
type = types.package;
package = lib.mkOption {
type = lib.types.package;
default = config.boot.kernelPackages.netatop;
defaultText = literalExpression "config.boot.kernelPackages.netatop";
defaultText = lib.literalExpression "config.boot.kernelPackages.netatop";
description = ''
Which package to use for netatop.
'';
};
};
atopgpu.enable = mkOption {
type = types.bool;
atopgpu.enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to install and enable the atopgpud daemon to get information about
@ -46,8 +44,8 @@ in
'';
};
setuidWrapper.enable = mkOption {
type = types.bool;
setuidWrapper.enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to install a setuid wrapper for Atop. This is required to use some of
@ -56,24 +54,24 @@ in
'';
};
atopService.enable = mkOption {
type = types.bool;
atopService.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to enable the atop service responsible for storing statistics for
long-term analysis.
'';
};
atopRotateTimer.enable = mkOption {
type = types.bool;
atopRotateTimer.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to enable the atop-rotate timer, which restarts the atop service
daily to make sure the data files are rotate.
'';
};
atopacctService.enable = mkOption {
type = types.bool;
atopacctService.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to enable the atopacct service which manages process accounting.
@ -81,8 +79,8 @@ in
two refresh intervals.
'';
};
settings = mkOption {
type = types.attrs;
settings = lib.mkOption {
type = lib.types.attrs;
default = { };
example = {
flags = "a1f";
@ -95,7 +93,7 @@ in
};
};
config = mkIf cfg.enable (
config = lib.mkIf cfg.enable (
let
atop =
if cfg.atopgpu.enable then
@ -104,11 +102,11 @@ in
cfg.package;
in
{
environment.etc = mkIf (cfg.settings != { }) {
atoprc.text = concatStrings
(mapAttrsToList
environment.etc = lib.mkIf (cfg.settings != { }) {
atoprc.text = lib.concatStrings
(lib.mapAttrsToList
(n: v: ''
${n} ${toString v}
${n} ${builtins.toString v}
'')
cfg.settings);
};
@ -122,8 +120,8 @@ in
wantedBy = [ (if type == "services" then "multi-user.target" else if type == "timers" then "timers.target" else null) ];
};
};
mkService = mkSystemd "services";
mkTimer = mkSystemd "timers";
mkService = lib.mkSystemd "services";
mkTimer = lib.mkSystemd "timers";
in
{
packages = [ atop (lib.mkIf cfg.netatop.enable cfg.netatop.package) ];

View File

@ -1,15 +1,13 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.ausweisapp;
in
{
options.programs.ausweisapp = {
enable = mkEnableOption "AusweisApp";
enable = lib.mkEnableOption "AusweisApp";
openFirewall = mkOption {
openFirewall = lib.mkOption {
description = ''
Whether to open the required firewall ports for the Smartphone as Card Reader (SaC) functionality of AusweisApp.
'';
@ -18,7 +16,7 @@ in
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ ausweisapp ];
networking.firewall.allowedUDPPorts = lib.optionals cfg.openFirewall [ 24727 ];
};

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.autojump;
prg = config.programs;
@ -10,8 +8,8 @@ in
options = {
programs.autojump = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable autojump.
@ -22,12 +20,12 @@ in
###### implementation
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.pathsToLink = [ "/share/autojump" ];
environment.systemPackages = [ pkgs.autojump ];
programs.bash.interactiveShellInit = "source ${pkgs.autojump}/share/autojump/autojump.bash";
programs.zsh.interactiveShellInit = mkIf prg.zsh.enable "source ${pkgs.autojump}/share/autojump/autojump.zsh";
programs.fish.interactiveShellInit = mkIf prg.fish.enable "source ${pkgs.autojump}/share/autojump/autojump.fish";
programs.zsh.interactiveShellInit = lib.mkIf prg.zsh.enable "source ${pkgs.autojump}/share/autojump/autojump.zsh";
programs.fish.interactiveShellInit = lib.mkIf prg.fish.enable "source ${pkgs.autojump}/share/autojump/autojump.fish";
};
}

View File

@ -1,15 +1,13 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.programs.bandwhich;
in {
meta.maintainers = with maintainers; [ Br1ght0ne ];
meta.maintainers = with lib.maintainers; [ Br1ght0ne ];
options = {
programs.bandwhich = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to add bandwhich to the global environment and configure a
@ -19,7 +17,7 @@ in {
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ bandwhich ];
security.wrappers.bandwhich = {
owner = "root";

View File

@ -1,7 +1,5 @@
{ config, pkgs, lib, ... }:
with lib;
let
prg = config.programs;
cfg = prg.bash-my-aws;
@ -13,11 +11,11 @@ in
{
options = {
programs.bash-my-aws = {
enable = mkEnableOption "bash-my-aws";
enable = lib.mkEnableOption "bash-my-aws";
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ bash-my-aws ];
programs.bash.interactiveShellInit = initScript;

View File

@ -1,18 +1,16 @@
{ config, lib, pkgs, ... }:
with lib;
let
enable = config.programs.bash.enableCompletion;
in
{
options = {
programs.bash.enableCompletion = mkEnableOption "Bash completion for all interactive bash shells" // {
programs.bash.enableCompletion = lib.mkEnableOption "Bash completion for all interactive bash shells" // {
default = true;
};
};
config = mkIf enable {
config = lib.mkIf enable {
programs.bash.promptPluginInit = ''
# Check whether we're running a version of Bash that has support for
# programmable completion. If we do, enable all modules installed in

View File

@ -3,24 +3,22 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfge = config.environment;
cfg = config.programs.bash;
bashAliases = concatStringsSep "\n" (
mapAttrsFlatten (k: v: "alias -- ${k}=${escapeShellArg v}")
(filterAttrs (k: v: v != null) cfg.shellAliases)
bashAliases = builtins.concatStringsSep "\n" (
lib.mapAttrsFlatten (k: v: "alias -- ${k}=${lib.escapeShellArg v}")
(lib.filterAttrs (k: v: v != null) cfg.shellAliases)
);
in
{
imports = [
(mkRemovedOptionModule [ "programs" "bash" "enable" ] "")
(lib.mkRemovedOptionModule [ "programs" "bash" "enable" ] "")
];
options = {
@ -28,7 +26,7 @@ in
programs.bash = {
/*
enable = mkOption {
enable = lib.mkOption {
default = true;
description = ''
Whenever to configure Bash as an interactive shell.
@ -38,44 +36,44 @@ in
set this variable if you have another shell configured
with NixOS.
'';
type = types.bool;
type = lib.types.bool;
};
*/
shellAliases = mkOption {
shellAliases = lib.mkOption {
default = {};
description = ''
Set of aliases for bash shell, which overrides {option}`environment.shellAliases`.
See {option}`environment.shellAliases` for an option format description.
'';
type = with types; attrsOf (nullOr (either str path));
type = with lib.types; attrsOf (nullOr (either str path));
};
shellInit = mkOption {
shellInit = lib.mkOption {
default = "";
description = ''
Shell script code called during bash shell initialisation.
'';
type = types.lines;
type = lib.types.lines;
};
loginShellInit = mkOption {
loginShellInit = lib.mkOption {
default = "";
description = ''
Shell script code called during login bash shell initialisation.
'';
type = types.lines;
type = lib.types.lines;
};
interactiveShellInit = mkOption {
interactiveShellInit = lib.mkOption {
default = "";
description = ''
Shell script code called during interactive bash shell initialisation.
'';
type = types.lines;
type = lib.types.lines;
};
promptInit = mkOption {
promptInit = lib.mkOption {
default = ''
# Provide a nice prompt if the terminal supports it.
if [ "$TERM" != "dumb" ] || [ -n "$INSIDE_EMACS" ]; then
@ -95,15 +93,15 @@ in
description = ''
Shell script code used to initialise the bash prompt.
'';
type = types.lines;
type = lib.types.lines;
};
promptPluginInit = mkOption {
promptPluginInit = lib.mkOption {
default = "";
description = ''
Shell script code used to initialise bash prompt plugins.
'';
type = types.lines;
type = lib.types.lines;
internal = true;
};
@ -111,11 +109,11 @@ in
};
config = /* mkIf cfg.enable */ {
config = /* lib.mkIf cfg.enable */ {
programs.bash = {
shellAliases = mapAttrs (name: mkDefault) cfge.shellAliases;
shellAliases = builtins.mapAttrs (name: lib.mkDefault) cfge.shellAliases;
shellInit = ''
if [ -z "$__NIXOS_SET_ENVIRONMENT_DONE" ]; then
@ -196,11 +194,11 @@ in
# Configuration for readline in bash. We use "option default"
# priority to allow user override using both .text and .source.
environment.etc.inputrc.source = mkOptionDefault ./inputrc;
environment.etc.inputrc.source = lib.mkOptionDefault ./inputrc;
users.defaultUserShell = mkDefault pkgs.bashInteractive;
users.defaultUserShell = lib.mkDefault pkgs.bashInteractive;
environment.pathsToLink = optionals cfg.enableCompletion [
environment.pathsToLink = lib.optionals cfg.enableCompletion [
"/etc/bash_completion.d"
"/share/bash-completion"
];

View File

@ -1,16 +1,15 @@
{ lib, config, pkgs, ... }:
with lib;
let
cfg = config.programs.bash.blesh;
in {
options = {
programs.bash.blesh.enable = mkEnableOption "blesh, a full-featured line editor written in pure Bash";
programs.bash.blesh.enable = lib.mkEnableOption "blesh, a full-featured line editor written in pure Bash";
};
config = mkIf cfg.enable {
programs.bash.interactiveShellInit = mkBefore ''
config = lib.mkIf cfg.enable {
programs.bash.interactiveShellInit = lib.mkBefore ''
source ${pkgs.blesh}/share/blesh/ble.sh
'';
};
meta.maintainers = with maintainers; [ laalsaas ];
meta.maintainers = with lib.maintainers; [ laalsaas ];
}

View File

@ -1,18 +1,16 @@
{ config, lib, pkgs, ... }:
with lib;
let
enable = config.programs.bash.enableLsColors;
in
{
options = {
programs.bash.enableLsColors = mkEnableOption "extra colors in directory listings" // {
programs.bash.enableLsColors = lib.mkEnableOption "extra colors in directory listings" // {
default = true;
};
};
config = mkIf enable {
config = lib.mkIf enable {
programs.bash.promptPluginInit = ''
eval "$(${pkgs.coreutils}/bin/dircolors -b)"
'';

View File

@ -1,36 +1,34 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.bash.undistractMe;
in
{
options = {
programs.bash.undistractMe = {
enable = mkEnableOption "notifications when long-running terminal commands complete";
enable = lib.mkEnableOption "notifications when long-running terminal commands complete";
playSound = mkEnableOption "notification sounds when long-running terminal commands complete";
playSound = lib.mkEnableOption "notification sounds when long-running terminal commands complete";
timeout = mkOption {
timeout = lib.mkOption {
default = 10;
description = ''
Number of seconds it would take for a command to be considered long-running.
'';
type = types.int;
type = lib.types.int;
};
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
programs.bash.promptPluginInit = ''
export LONG_RUNNING_COMMAND_TIMEOUT=${toString cfg.timeout}
export LONG_RUNNING_COMMAND_TIMEOUT=${builtins.toString cfg.timeout}
export UDM_PLAY_SOUND=${if cfg.playSound then "1" else "0"}
. "${pkgs.undistract-me}/etc/profile.d/undistract-me.sh"
'';
};
meta = {
maintainers = with maintainers; [ kira-bruneau ];
maintainers = with lib.maintainers; [ kira-bruneau ];
};
}

View File

@ -1,12 +1,10 @@
{ config, lib, pkgs, ... }:
with lib;
{
options.programs.browserpass.enable = mkEnableOption "Browserpass native messaging host";
options.programs.browserpass.enable = lib.mkEnableOption "Browserpass native messaging host";
config = mkIf config.programs.browserpass.enable {
config = lib.mkIf config.programs.browserpass.enable {
environment.etc = let
appId = "com.github.browserpass.native.json";
source = part: "${pkgs.browserpass}/lib/browserpass/${part}/${appId}";

View File

@ -1,19 +1,17 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.calls;
in {
options = {
programs.calls = {
enable = mkEnableOption ''
enable = lib.mkEnableOption ''
GNOME calls: a phone dialer and call handler
'';
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
programs.dconf.enable = true;
environment.systemPackages = [

View File

@ -1,36 +1,34 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.programs.cdemu;
in {
options = {
programs.cdemu = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
{command}`cdemu` for members of
{option}`programs.cdemu.group`.
'';
};
group = mkOption {
type = types.str;
group = lib.mkOption {
type = lib.types.str;
default = "cdrom";
description = ''
Group that users must be in to use {command}`cdemu`.
'';
};
gui = mkOption {
type = types.bool;
gui = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to install the {command}`cdemu` GUI (gCDEmu).
'';
};
image-analyzer = mkOption {
type = types.bool;
image-analyzer = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to install the image analyzer.
@ -39,7 +37,7 @@ in {
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
boot = {
extraModulePackages = [ config.boot.kernelPackages.vhba ];
@ -68,8 +66,8 @@ in {
environment.systemPackages =
[ pkgs.cdemu-daemon pkgs.cdemu-client ]
++ optional cfg.gui pkgs.gcdemu
++ optional cfg.image-analyzer pkgs.image-analyzer;
++ lib.optional cfg.gui pkgs.gcdemu
++ lib.optional cfg.image-analyzer pkgs.image-analyzer;
};
}

View File

@ -2,8 +2,6 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.programs.cfs-zen-tweaks;
@ -13,14 +11,14 @@ in
{
meta = {
maintainers = with maintainers; [ mkg20001 ];
maintainers = with lib.maintainers; [ mkg20001 ];
};
options = {
programs.cfs-zen-tweaks.enable = mkEnableOption "CFS Zen Tweaks";
programs.cfs-zen-tweaks.enable = lib.mkEnableOption "CFS Zen Tweaks";
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
systemd.packages = [ pkgs.cfs-zen-tweaks ];
systemd.services.set-cfs-tweaks.wantedBy = [

View File

@ -1,11 +1,9 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.chromium;
defaultProfile = filterAttrs (k: v: v != null) {
defaultProfile = lib.filterAttrs (k: v: v != null) {
HomepageLocation = cfg.homepageLocation;
DefaultSearchProviderEnabled = cfg.defaultSearchProviderEnabled;
DefaultSearchProviderSearchURL = cfg.defaultSearchProviderSearchURL;
@ -19,14 +17,14 @@ in
options = {
programs.chromium = {
enable = mkEnableOption "{command}`chromium` policies";
enable = lib.mkEnableOption "{command}`chromium` policies";
enablePlasmaBrowserIntegration = mkEnableOption "Native Messaging Host for Plasma Browser Integration";
enablePlasmaBrowserIntegration = lib.mkEnableOption "Native Messaging Host for Plasma Browser Integration";
plasmaBrowserIntegrationPackage = mkPackageOption pkgs [ "plasma5Packages" "plasma-browser-integration" ] { };
plasmaBrowserIntegrationPackage = lib.mkPackageOption pkgs [ "plasma5Packages" "plasma-browser-integration" ] { };
extensions = mkOption {
type = with types; nullOr (listOf str);
extensions = lib.mkOption {
type = with lib.types; nullOr (listOf str);
description = ''
List of chromium extensions to install.
For list of plugins ids see id in url of extensions on
@ -38,7 +36,7 @@ in
for additional details.
'';
default = null;
example = literalExpression ''
example = lib.literalExpression ''
[
"chlffgpmiacpedhhbkiomidkjlcfhogd" # pushbullet
"mbniclmhobmnbdlbpiphghaielnnpgdp" # lightshot
@ -48,36 +46,36 @@ in
'';
};
homepageLocation = mkOption {
type = types.nullOr types.str;
homepageLocation = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = "Chromium default homepage";
default = null;
example = "https://nixos.org";
};
defaultSearchProviderEnabled = mkOption {
type = types.nullOr types.bool;
defaultSearchProviderEnabled = lib.mkOption {
type = lib.types.nullOr lib.types.bool;
description = "Enable the default search provider.";
default = null;
example = true;
};
defaultSearchProviderSearchURL = mkOption {
type = types.nullOr types.str;
defaultSearchProviderSearchURL = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = "Chromium default search provider url.";
default = null;
example = "https://encrypted.google.com/search?q={searchTerms}&{google:RLZ}{google:originalQueryForSuggestion}{google:assistedQueryStats}{google:searchFieldtrialParameter}{google:searchClient}{google:sourceId}{google:instantExtendedEnabledParameter}ie={inputEncoding}";
};
defaultSearchProviderSuggestURL = mkOption {
type = types.nullOr types.str;
defaultSearchProviderSuggestURL = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = "Chromium default search provider url for suggestions.";
default = null;
example = "https://encrypted.google.com/complete/search?output=chrome&q={searchTerms}";
};
extraOpts = mkOption {
type = types.attrs;
extraOpts = lib.mkOption {
type = lib.types.attrs;
description = ''
Extra chromium policy options. A list of available policies
can be found in the Chrome Enterprise documentation:
@ -85,7 +83,7 @@ in
Make sure the selected policy is supported on Linux and your browser version.
'';
default = {};
example = literalExpression ''
example = lib.literalExpression ''
{
"BrowserSignin" = 0;
"SyncDisabled" = true;
@ -99,8 +97,8 @@ in
'';
};
initialPrefs = mkOption {
type = types.attrs;
initialPrefs = lib.mkOption {
type = lib.types.attrs;
description = ''
Initial preferences are used to configure the browser for the first run.
Unlike {option}`programs.chromium.extraOpts`, initialPrefs can be changed by users in the browser settings.
@ -108,7 +106,7 @@ in
<https://www.chromium.org/administrators/configuring-other-preferences/>
'';
default = {};
example = literalExpression ''
example = lib.literalExpression ''
{
"first_run_tabs" = [
"https://nixos.org/"

View File

@ -1,18 +1,16 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.cnping;
in
{
options = {
programs.cnping = {
enable = mkEnableOption "a setcap wrapper for cnping";
enable = lib.mkEnableOption "a setcap wrapper for cnping";
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
security.wrappers.cnping = {
source = "${pkgs.cnping}/bin/cnping";
capabilities = "cap_net_raw+ep";

View File

@ -5,8 +5,6 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.command-not-found;
commandNotFound = pkgs.substituteAll {
@ -23,8 +21,8 @@ in
{
options.programs.command-not-found = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether interactive shells should show which Nix package (if
@ -32,7 +30,7 @@ in
'';
};
dbPath = mkOption {
dbPath = lib.mkOption {
default = "/nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite" ;
description = ''
Absolute path to programs.sqlite.
@ -40,11 +38,11 @@ in
By default this file will be provided by your channel
(nixexprs.tar.xz).
'';
type = types.path;
type = lib.types.path;
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
programs.bash.interactiveShellInit =
''
# This function is called whenever a command is not found.

View File

@ -1,14 +1,12 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.programs.criu;
in {
options = {
programs.criu = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Install {command}`criu` along with necessary kernel options.
@ -16,7 +14,7 @@ in {
};
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
system.requiredKernelConfig = with config.lib.kernelConfig; [
(isYes "CHECKPOINT_RESTORE")
];

View File

@ -1,29 +1,27 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.digitalbitbox;
in
{
options.programs.digitalbitbox = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Installs the Digital Bitbox application and enables the complementary hardware module.
'';
};
package = mkPackageOption pkgs "digitalbitbox" {
package = lib.mkPackageOption pkgs "digitalbitbox" {
extraDescription = ''
This can be used to install a package with udev rules that differ from the defaults.
'';
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
hardware.digitalbitbox = {
enable = true;

View File

@ -1,19 +1,17 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.dmrconfig;
in {
meta.maintainers = with maintainers; [ ];
meta.maintainers = with lib.maintainers; [ ];
###### interface
options = {
programs.dmrconfig = {
enable = mkOption {
enable = lib.mkOption {
default = false;
type = types.bool;
type = lib.types.bool;
description = ''
Whether to configure system to enable use of dmrconfig. This
enables the required udev rules and installs the program.
@ -21,12 +19,12 @@ in {
relatedPackages = [ "dmrconfig" ];
};
package = mkPackageOption pkgs "dmrconfig" { };
package = lib.mkPackageOption pkgs "dmrconfig" { };
};
};
###### implementation
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
services.udev.packages = [ cfg.package ];
};

View File

@ -1,10 +1,8 @@
{ lib, pkgs, config, ... }:
with lib;
{
options.programs.droidcam = {
enable = mkEnableOption "DroidCam client";
enable = lib.mkEnableOption "DroidCam client";
};
config = lib.mkIf config.programs.droidcam.enable {

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.dublin-traceroute;
@ -10,22 +8,22 @@ in {
options = {
programs.dublin-traceroute = {
enable = mkEnableOption ''
enable = lib.mkEnableOption ''
dublin-traceroute, add it to the global environment and configure a setcap wrapper for it.
'';
package = mkPackageOption pkgs "dublin-traceroute" { };
package = lib.mkPackageOption pkgs "dublin-traceroute" { };
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
security.wrappers.dublin-traceroute = {
owner = "root";
group = "root";
capabilities = "cap_net_raw+p";
source = getExe cfg.package;
source = lib.getExe cfg.package;
};
};
}

View File

@ -1,16 +1,14 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.ecryptfs;
in {
options.programs.ecryptfs = {
enable = mkEnableOption "ecryptfs setuid mount wrappers";
enable = lib.mkEnableOption "ecryptfs setuid mount wrappers";
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
security.wrappers = {
"mount.ecryptfs_private" = {

View File

@ -4,8 +4,6 @@
{ config, lib, ... }:
with lib;
let
cfg = config.environment;
@ -20,14 +18,14 @@ in
{ NIXPKGS_CONFIG = "/etc/nix/nixpkgs-config.nix";
# note: many programs exec() this directly, so default options for less must not
# be specified here; do so in the default value of programs.less.envVariables instead
PAGER = mkDefault "less";
EDITOR = mkDefault "nano";
PAGER = lib.mkDefault "less";
EDITOR = lib.mkDefault "nano";
};
# since we set PAGER to this above, make sure it's installed
programs.less.enable = true;
environment.profiles = mkAfter
environment.profiles = lib.mkAfter
[ "/nix/var/nix/profiles/default"
"/run/current-system/sw"
];
@ -53,7 +51,7 @@ in
environment.extraInit =
''
export NIX_USER_PROFILE_DIR="/nix/var/nix/profiles/per-user/$USER"
export NIX_PROFILES="${concatStringsSep " " (reverseList cfg.profiles)}"
export NIX_PROFILES="${builtins.concatStringsSep " " (lib.reverseList cfg.profiles)}"
'';
};

View File

@ -1,16 +1,15 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.programs.extra-container;
in {
options = {
programs.extra-container.enable = mkEnableOption ''
programs.extra-container.enable = lib.mkEnableOption ''
extra-container, a tool for running declarative NixOS containers
without host system rebuilds
'';
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.extra-container ];
boot.extraSystemdUnitPaths = [ "/etc/systemd-mutable/system" ];
};

View File

@ -1,21 +1,19 @@
{ pkgs, lib, config, ... }:
with lib;
let
cfg = config.programs.feedbackd;
in {
options = {
programs.feedbackd = {
enable = mkEnableOption ''
enable = lib.mkEnableOption ''
the feedbackd D-BUS service and udev rules.
Your user needs to be in the `feedbackd` group to trigger effects
'';
package = mkPackageOption pkgs "feedbackd" { };
package = lib.mkPackageOption pkgs "feedbackd" { };
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
services.dbus.packages = [ cfg.package ];

View File

@ -1,7 +1,5 @@
{ pkgs, config, lib, ... }:
with lib;
let
cfg = config.programs.firefox;
@ -62,13 +60,13 @@ let
in
{
options.programs.firefox = {
enable = mkEnableOption "the Firefox web browser";
enable = lib.mkEnableOption "the Firefox web browser";
package = mkOption {
type = types.package;
package = lib.mkOption {
type = lib.types.package;
default = pkgs.firefox;
description = "Firefox package to use.";
defaultText = literalExpression "pkgs.firefox";
defaultText = lib.literalExpression "pkgs.firefox";
relatedPackages = [
"firefox"
"firefox-beta-bin"
@ -78,13 +76,13 @@ in
];
};
wrapperConfig = mkOption {
type = types.attrs;
wrapperConfig = lib.mkOption {
type = lib.types.attrs;
default = {};
description = "Arguments to pass to Firefox wrapper";
};
policies = mkOption {
policies = lib.mkOption {
type = policyFormat.type;
default = { };
description = ''
@ -100,8 +98,8 @@ in
'';
};
preferences = mkOption {
type = with types; attrsOf (oneOf [ bool int str ]);
preferences = lib.mkOption {
type = with lib.types; attrsOf (oneOf [ bool int str ]);
default = { };
description = ''
Preferences to set from `about:config`.
@ -113,8 +111,8 @@ in
'';
};
preferencesStatus = mkOption {
type = types.enum [ "default" "locked" "user" "clear" ];
preferencesStatus = lib.mkOption {
type = lib.types.enum [ "default" "locked" "user" "clear" ];
default = "locked";
description = ''
The status of `firefox.preferences`.
@ -127,9 +125,9 @@ in
'';
};
languagePacks = mkOption {
languagePacks = lib.mkOption {
# Available languages can be found in https://releases.mozilla.org/pub/firefox/releases/${cfg.package.version}/linux-x86_64/xpi/
type = types.listOf (types.enum ([
type = lib.types.listOf (lib.types.enum ([
"ach"
"af"
"an"
@ -235,8 +233,8 @@ in
'';
};
autoConfig = mkOption {
type = types.lines;
autoConfig = lib.mkOption {
type = lib.types.lines;
default = "";
description = ''
AutoConfig files can be used to set and lock preferences that are not covered
@ -247,19 +245,19 @@ in
};
nativeMessagingHosts = ({
packages = mkOption {
type = types.listOf types.package;
packages = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [];
description = ''
Additional packages containing native messaging hosts that should be made available to Firefox extensions.
'';
};
}) // (mapAttrs (k: v: mkEnableOption "${v.name} support") nmhOptions);
}) // (builtins.mapAttrs (k: v: lib.mkEnableOption "${v.name} support") nmhOptions);
};
config = let
forEachEnabledNmh = fn: flatten (mapAttrsToList (k: v: lib.optional cfg.nativeMessagingHosts.${k} (fn k v)) nmhOptions);
in mkIf cfg.enable {
forEachEnabledNmh = fn: lib.flatten (lib.mapAttrsToList (k: v: lib.optional cfg.nativeMessagingHosts.${k} (fn k v)) nmhOptions);
in lib.mkIf cfg.enable {
warnings = forEachEnabledNmh (k: v:
"The `programs.firefox.nativeMessagingHosts.${k}` option is deprecated, " +
"please add `${v.package.pname}` to `programs.firefox.nativeMessagingHosts.packages` instead."
@ -278,18 +276,18 @@ in
let
policiesJSON = policyFormat.generate "firefox-policies.json" { inherit (cfg) policies; };
in
mkIf (cfg.policies != { }) {
lib.mkIf (cfg.policies != { }) {
"firefox/policies/policies.json".source = "${policiesJSON}";
};
# Preferences are converted into a policy
programs.firefox.policies = {
DisableAppUpdate = true;
Preferences = (mapAttrs
Preferences = (builtins.mapAttrs
(_: value: { Value = value; Status = cfg.preferencesStatus; })
cfg.preferences);
ExtensionSettings = listToAttrs (map
(lang: nameValuePair
ExtensionSettings = builtins.listToAttrs (builtins.map
(lang: builtins.nameValuePair
"langpack-${lang}@firefox.mozilla.org"
{
installation_mode = "normal_installed";
@ -300,5 +298,5 @@ in
};
};
meta.maintainers = with maintainers; [ danth ];
meta.maintainers = with lib.maintainers; [ danth ];
}

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.firejail;
@ -21,13 +19,13 @@ let
else { executable = value; desktop = null; profile = null; extraArgs = []; };
args = lib.escapeShellArgs (
opts.extraArgs
++ (optional (opts.profile != null) "--profile=${toString opts.profile}")
++ (lib.optional (opts.profile != null) "--profile=${builtins.toString opts.profile}")
);
in
''
cat <<_EOF >$out/bin/${command}
#! ${pkgs.runtimeShell} -e
exec /run/wrappers/bin/firejail ${args} -- ${toString opts.executable} "\$@"
exec /run/wrappers/bin/firejail ${args} -- ${builtins.toString opts.executable} "\$@"
_EOF
chmod 0755 $out/bin/${command}
@ -40,30 +38,30 @@ let
in {
options.programs.firejail = {
enable = mkEnableOption "firejail, a sandboxing tool for Linux";
enable = lib.mkEnableOption "firejail, a sandboxing tool for Linux";
wrappedBinaries = mkOption {
type = types.attrsOf (types.either types.path (types.submodule {
wrappedBinaries = lib.mkOption {
type = lib.types.attrsOf (lib.types.either lib.types.path (lib.types.submodule {
options = {
executable = mkOption {
type = types.path;
executable = lib.mkOption {
type = lib.types.path;
description = "Executable to run sandboxed";
example = literalExpression ''"''${lib.getBin pkgs.firefox}/bin/firefox"'';
example = lib.literalExpression ''"''${lib.getBin pkgs.firefox}/bin/firefox"'';
};
desktop = mkOption {
type = types.nullOr types.path;
desktop = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = ".desktop file to modify. Only necessary if it uses the absolute path to the executable.";
example = literalExpression ''"''${pkgs.firefox}/share/applications/firefox.desktop"'';
example = lib.literalExpression ''"''${pkgs.firefox}/share/applications/firefox.desktop"'';
};
profile = mkOption {
type = types.nullOr types.path;
profile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = "Profile to use";
example = literalExpression ''"''${pkgs.firejail}/etc/firejail/firefox.profile"'';
example = lib.literalExpression ''"''${pkgs.firejail}/etc/firejail/firefox.profile"'';
};
extraArgs = mkOption {
type = types.listOf types.str;
extraArgs = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [];
description = "Extra arguments to pass to firejail";
example = [ "--private=~/.firejail_home" ];
@ -71,7 +69,7 @@ in {
};
}));
default = {};
example = literalExpression ''
example = lib.literalExpression ''
{
firefox = {
executable = "''${lib.getBin pkgs.firefox}/bin/firefox";
@ -89,7 +87,7 @@ in {
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
security.wrappers.firejail =
{ setuid = true;
owner = "root";
@ -100,5 +98,5 @@ in {
environment.systemPackages = [ pkgs.firejail ] ++ [ wrappedBins ];
};
meta.maintainers = with maintainers; [ peterhoeg ];
meta.maintainers = with lib.maintainers; [ peterhoeg ];
}

View File

@ -1,21 +1,19 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfge = config.environment;
cfg = config.programs.fish;
fishAbbrs = concatStringsSep "\n" (
mapAttrsFlatten (k: v: "abbr -ag ${k} ${escapeShellArg v}")
fishAbbrs = builtins.concatStringsSep "\n" (
lib.mapAttrsFlatten (k: v: "abbr -ag ${k} ${builtins.escapeShellArg v}")
cfg.shellAbbrs
);
fishAliases = concatStringsSep "\n" (
mapAttrsFlatten (k: v: "alias ${k} ${escapeShellArg v}")
(filterAttrs (k: v: v != null) cfg.shellAliases)
fishAliases = builtins.concatStringsSep "\n" (
builtins.mapAttrsFlatten (k: v: "alias ${k} ${builtins.escapeShellArg v}")
(builtins.filterAttrs (k: v: v != null) cfg.shellAliases)
);
envShellInit = pkgs.writeText "shellInit" cfge.shellInit;
@ -47,18 +45,18 @@ in
programs.fish = {
enable = mkOption {
enable = lib.mkOption {
default = false;
description = ''
Whether to configure fish as an interactive shell.
'';
type = types.bool;
type = lib.types.bool;
};
package = mkPackageOption pkgs "fish" { };
package = lib.mkPackageOption pkgs "fish" { };
useBabelfish = mkOption {
type = types.bool;
useBabelfish = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
If enabled, the configured environment will be translated to native fish using [babelfish](https://github.com/bouk/babelfish).
@ -66,31 +64,31 @@ in
'';
};
vendor.config.enable = mkOption {
type = types.bool;
vendor.config.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether fish should source configuration snippets provided by other packages.
'';
};
vendor.completions.enable = mkOption {
type = types.bool;
vendor.completions.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether fish should use completion files provided by other packages.
'';
};
vendor.functions.enable = mkOption {
type = types.bool;
vendor.functions.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether fish should autoload fish functions provided by other packages.
'';
};
shellAbbrs = mkOption {
shellAbbrs = lib.mkOption {
default = {};
example = {
gco = "git checkout";
@ -99,63 +97,63 @@ in
description = ''
Set of fish abbreviations.
'';
type = with types; attrsOf str;
type = with lib.types; attrsOf str;
};
shellAliases = mkOption {
shellAliases = lib.mkOption {
default = {};
description = ''
Set of aliases for fish shell, which overrides {option}`environment.shellAliases`.
See {option}`environment.shellAliases` for an option format description.
'';
type = with types; attrsOf (nullOr (either str path));
type = with lib.types; attrsOf (nullOr (either str path));
};
shellInit = mkOption {
shellInit = lib.mkOption {
default = "";
description = ''
Shell script code called during fish shell initialisation.
'';
type = types.lines;
type = lib.types.lines;
};
loginShellInit = mkOption {
loginShellInit = lib.mkOption {
default = "";
description = ''
Shell script code called during fish login shell initialisation.
'';
type = types.lines;
type = lib.types.lines;
};
interactiveShellInit = mkOption {
interactiveShellInit = lib.mkOption {
default = "";
description = ''
Shell script code called during interactive fish shell initialisation.
'';
type = types.lines;
type = lib.types.lines;
};
promptInit = mkOption {
promptInit = lib.mkOption {
default = "";
description = ''
Shell script code used to initialise fish prompt.
'';
type = types.lines;
type = lib.types.lines;
};
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
programs.fish.shellAliases = mapAttrs (name: mkDefault) cfge.shellAliases;
programs.fish.shellAliases = builtins.mapAttrs (name: lib.mkDefault) cfge.shellAliases;
# Required for man completions
documentation.man.generateCaches = lib.mkDefault true;
environment = mkMerge [
(mkIf cfg.useBabelfish
environment = lib.mkMerge [
(lib.mkIf cfg.useBabelfish
{
etc."fish/setEnvironment.fish".source = babelfishTranslate config.system.build.setEnvironment "setEnvironment";
etc."fish/shellInit.fish".source = babelfishTranslate envShellInit "shellInit";
@ -163,7 +161,7 @@ in
etc."fish/interactiveShellInit.fish".source = babelfishTranslate envInteractiveShellInit "interactiveShellInit";
})
(mkIf (!cfg.useBabelfish)
(lib.mkIf (!cfg.useBabelfish)
{
etc."fish/foreign-env/shellInit".source = envShellInit;
etc."fish/foreign-env/loginShellInit".source = envLoginShellInit;
@ -266,7 +264,7 @@ in
pathName = substring storeLength (stringLength package - storeLength) package;
in (package.name or pathName) + "_fish-completions")
( { inherit package; } //
optionalAttrs (package ? meta.priority) { meta.priority = package.meta.priority; })
lib.optionalAttrs (package ? meta.priority) { meta.priority = package.meta.priority; })
''
mkdir -p $out
if [ -d $package/share/man ]; then
@ -277,16 +275,16 @@ in
pkgs.buildEnv {
name = "system_fish-completions";
ignoreCollisions = true;
paths = map generateCompletions config.environment.systemPackages;
paths = builtins.map generateCompletions config.environment.systemPackages;
};
}
# include programs that bring their own completions
{
pathsToLink = []
++ optional cfg.vendor.config.enable "/share/fish/vendor_conf.d"
++ optional cfg.vendor.completions.enable "/share/fish/vendor_completions.d"
++ optional cfg.vendor.functions.enable "/share/fish/vendor_functions.d";
++ lib.optional cfg.vendor.config.enable "/share/fish/vendor_conf.d"
++ lib.optional cfg.vendor.completions.enable "/share/fish/vendor_completions.d"
++ lib.optional cfg.vendor.functions.enable "/share/fish/vendor_functions.d";
}
{ systemPackages = [ cfg.package ]; }

View File

@ -1,14 +1,12 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.flashrom;
in
{
options.programs.flashrom = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Installs flashrom and configures udev rules for programmers
@ -16,10 +14,10 @@ in
group.
'';
};
package = mkPackageOption pkgs "flashrom" { };
package = lib.mkPackageOption pkgs "flashrom" { };
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
services.udev.packages = [ cfg.package ];
environment.systemPackages = [ cfg.package ];
};

View File

@ -1,19 +1,17 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.programs.flexoptix-app;
in {
options = {
programs.flexoptix-app = {
enable = mkEnableOption "FLEXOPTIX app + udev rules";
enable = lib.mkEnableOption "FLEXOPTIX app + udev rules";
package = mkPackageOption pkgs "flexoptix-app" { };
package = lib.mkPackageOption pkgs "flexoptix-app" { };
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
services.udev.packages = [ cfg.package ];
};

View File

@ -2,8 +2,6 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.environment.freetds;
@ -14,10 +12,10 @@ in
options = {
environment.freetds = mkOption {
type = types.attrsOf types.str;
environment.freetds = lib.mkOption {
type = lib.types.attrsOf lib.types.str;
default = {};
example = literalExpression ''
example = lib.literalExpression ''
{ MYDATABASE = '''
host = 10.0.2.100
port = 1433
@ -40,14 +38,14 @@ in
###### implementation
config = mkIf (length (attrNames cfg) > 0) {
config = lib.mkIf (builtins.length (builtins.attrNames cfg) > 0) {
environment.variables.FREETDSCONF = "/etc/freetds.conf";
environment.variables.FREETDS = "/etc/freetds.conf";
environment.variables.SYBASE = "${pkgs.freetds}";
environment.etc."freetds.conf" = { text =
(concatStrings (mapAttrsToList (name: value:
(lib.concatStrings (lib.mapAttrsToList (name: value:
''
[${name}]
${value}

View File

@ -1,25 +1,23 @@
{ config, lib, ... }:
with lib;
let
cfg = config.programs.fuse;
in {
meta.maintainers = with maintainers; [ primeos ];
meta.maintainers = with lib.maintainers; [ primeos ];
options.programs.fuse = {
mountMax = mkOption {
mountMax = lib.mkOption {
# In the C code it's an "int" (i.e. signed and at least 16 bit), but
# negative numbers obviously make no sense:
type = types.ints.between 0 32767; # 2^15 - 1
type = lib.types.ints.between 0 32767; # 2^15 - 1
default = 1000;
description = ''
Set the maximum number of FUSE mounts allowed to non-root users.
'';
};
userAllowOther = mkOption {
type = types.bool;
userAllowOther = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Allow non-root users to specify the allow_other or allow_root mount
@ -30,8 +28,8 @@ in {
config = {
environment.etc."fuse.conf".text = ''
${optionalString (!cfg.userAllowOther) "#"}user_allow_other
mount_max = ${toString cfg.mountMax}
${lib.optionalString (!cfg.userAllowOther) "#"}user_allow_other
mount_max = ${builtins.toString cfg.mountMax}
'';
};
}

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.gamemode;
settingsFormat = pkgs.formats.ini { };
@ -10,20 +8,20 @@ in
{
options = {
programs.gamemode = {
enable = mkEnableOption "GameMode to optimise system performance on demand";
enable = lib.mkEnableOption "GameMode to optimise system performance on demand";
enableRenice = mkEnableOption "CAP_SYS_NICE on gamemoded to support lowering process niceness" // {
enableRenice = lib.mkEnableOption "CAP_SYS_NICE on gamemoded to support lowering process niceness" // {
default = true;
};
settings = mkOption {
settings = lib.mkOption {
type = settingsFormat.type;
default = { };
description = ''
System-wide configuration for GameMode (/etc/gamemode.ini).
See gamemoded(8) man page for available settings.
'';
example = literalExpression ''
example = lib.literalExpression ''
{
general = {
renice = 10;
@ -46,7 +44,7 @@ in
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment = {
systemPackages = [ pkgs.gamemode ];
etc."gamemode.ini".source = configFile;
@ -54,7 +52,7 @@ in
security = {
polkit.enable = true;
wrappers = mkIf cfg.enableRenice {
wrappers = lib.mkIf cfg.enableRenice {
gamemoded = {
owner = "root";
group = "root";
@ -77,14 +75,14 @@ in
#
# This uses a link farm to make sure other wrapped executables
# aren't included in PATH.
environment.PATH = mkForce (pkgs.linkFarm "pkexec" [
environment.PATH = lib.mkForce (pkgs.linkFarm "pkexec" [
{
name = "pkexec";
path = "${config.security.wrapperDir}/pkexec";
}
]);
serviceConfig.ExecStart = mkIf cfg.enableRenice [
serviceConfig.ExecStart = lib.mkIf cfg.enableRenice [
"" # Tell systemd to clear the existing ExecStart list, to prevent appending to it.
"${config.security.wrapperDir}/gamemoded"
];
@ -95,6 +93,6 @@ in
};
meta = {
maintainers = with maintainers; [ kira-bruneau ];
maintainers = with lib.maintainers; [ kira-bruneau ];
};
}

View File

@ -3,30 +3,30 @@
, pkgs
, ...
}:
with lib; let
let
cfg = config.programs.gamescope;
gamescope =
let
wrapperArgs =
optional (cfg.args != [ ])
''--add-flags "${toString cfg.args}"''
++ builtins.attrValues (mapAttrs (var: val: "--set-default ${var} ${val}") cfg.env);
lib.optional (cfg.args != [ ])
''--add-flags "${builtins.toString cfg.args}"''
++ builtins.attrValues (builtins.mapAttrs (var: val: "--set-default ${var} ${val}") cfg.env);
in
pkgs.runCommand "gamescope" { nativeBuildInputs = [ pkgs.makeBinaryWrapper ]; } ''
mkdir -p $out/bin
makeWrapper ${cfg.package}/bin/gamescope $out/bin/gamescope --inherit-argv0 \
${toString wrapperArgs}
${builtins.toString wrapperArgs}
'';
in
{
options.programs.gamescope = {
enable = mkEnableOption "gamescope, the SteamOS session compositing window manager";
enable = lib.mkEnableOption "gamescope, the SteamOS session compositing window manager";
package = mkPackageOption pkgs "gamescope" { };
package = lib.mkPackageOption pkgs "gamescope" { };
capSysNice = mkOption {
type = types.bool;
capSysNice = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Add cap_sys_nice capability to the GameScope
@ -34,8 +34,8 @@ in
'';
};
args = mkOption {
type = types.listOf types.str;
args = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
example = [ "--rt" "--prefer-vk-device 8086:9bc4" ];
description = ''
@ -43,10 +43,10 @@ in
'';
};
env = mkOption {
type = types.attrsOf types.str;
env = lib.mkOption {
type = lib.types.attrsOf lib.types.str;
default = { };
example = literalExpression ''
example = lib.literalExpression ''
# for Prime render offload on Nvidia laptops.
# Also requires `hardware.nvidia.prime.offload.enable`.
{
@ -61,8 +61,8 @@ in
};
};
config = mkIf cfg.enable {
security.wrappers = mkIf cfg.capSysNice {
config = lib.mkIf cfg.enable {
security.wrappers = lib.mkIf cfg.capSysNice {
gamescope = {
owner = "root";
group = "root";
@ -71,8 +71,8 @@ in
};
};
environment.systemPackages = mkIf (!cfg.capSysNice) [ gamescope ];
environment.systemPackages = lib.mkIf (!cfg.capSysNice) [ gamescope ];
};
meta.maintainers = with maintainers; [ nrdxp ];
meta.maintainers = with lib.maintainers; [ nrdxp ];
}

View File

@ -1,20 +1,18 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.programs.geary;
in {
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
options = {
programs.geary.enable = mkEnableOption "Geary, a Mail client for GNOME";
programs.geary.enable = lib.mkEnableOption "Geary, a Mail client for GNOME";
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.gnome.geary ];
programs.dconf.enable = true;
services.gnome.gnome-keyring.enable = true;

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.git;
in
@ -9,23 +7,23 @@ in
{
options = {
programs.git = {
enable = mkEnableOption "git, a distributed version control system";
enable = lib.mkEnableOption "git, a distributed version control system";
package = mkPackageOption pkgs "git" {
package = lib.mkPackageOption pkgs "git" {
example = "gitFull";
};
config = mkOption {
config = lib.mkOption {
type =
with types;
with lib.types;
let
gitini = attrsOf (attrsOf anything);
in
either gitini (listOf gitini) // {
merge = loc: defs:
let
config = foldl'
(acc: { value, ... }@x: acc // (if isList value then {
config = builtins.foldl'
(acc: { value, ... }@x: acc // (if builtins.isList value then {
ordered = acc.ordered ++ value;
} else {
unordered = acc.unordered ++ [ x ];
@ -55,25 +53,25 @@ in
};
prompt = {
enable = mkEnableOption "automatically sourcing git-prompt.sh. This does not change $PS1; it simply provides relevant utility functions";
enable = lib.mkEnableOption "automatically sourcing git-prompt.sh. This does not change $PS1; it simply provides relevant utility functions";
};
lfs = {
enable = mkEnableOption "git-lfs (Large File Storage)";
enable = lib.mkEnableOption "git-lfs (Large File Storage)";
package = mkPackageOption pkgs "git-lfs" { };
package = lib.mkPackageOption pkgs "git-lfs" { };
};
};
};
config = mkMerge [
(mkIf cfg.enable {
config = lib.mkMerge [
(lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
environment.etc.gitconfig = mkIf (cfg.config != [ ]) {
text = concatMapStringsSep "\n" generators.toGitINI cfg.config;
environment.etc.gitconfig = lib.mkIf (cfg.config != [ ]) {
text = lib.concatMapStringsSep "\n" lib.generators.toGitINI cfg.config;
};
})
(mkIf (cfg.enable && cfg.lfs.enable) {
(lib.mkIf (cfg.enable && cfg.lfs.enable) {
environment.systemPackages = [ cfg.lfs.package ];
programs.git.config = {
filter.lfs = {
@ -84,12 +82,12 @@ in
};
};
})
(mkIf (cfg.enable && cfg.prompt.enable) {
(lib.mkIf (cfg.enable && cfg.prompt.enable) {
environment.interactiveShellInit = ''
source ${cfg.package}/share/bash-completion/completions/git-prompt.sh
'';
})
];
meta.maintainers = with maintainers; [ figsoda ];
meta.maintainers = with lib.maintainers; [ figsoda ];
}

View File

@ -1,16 +1,14 @@
{ config, lib, pkgs, ... }:
with lib;
{
meta.maintainers = [ maintainers.league ];
meta.maintainers = [ lib.maintainers.league ];
###### interface
options = {
programs.gphoto2 = {
enable = mkOption {
enable = lib.mkOption {
default = false;
type = types.bool;
type = lib.types.bool;
description = ''
Whether to configure system to use gphoto2.
To grant digital camera access to a user, the user must
@ -22,7 +20,7 @@ with lib;
};
###### implementation
config = mkIf config.programs.gphoto2.enable {
config = lib.mkIf config.programs.gphoto2.enable {
services.udev.packages = [ pkgs.libgphoto2 ];
environment.systemPackages = [ pkgs.gphoto2 ];
users.groups.camera = {};

View File

@ -1,13 +1,11 @@
{ lib, pkgs, config, ... }:
with lib;
{
options.programs.haguichi = {
enable = mkEnableOption "Haguichi, a Linux GUI frontend to the proprietary LogMeIn Hamachi";
enable = lib.mkEnableOption "Haguichi, a Linux GUI frontend to the proprietary LogMeIn Hamachi";
};
config = mkIf config.programs.haguichi.enable {
config = lib.mkIf config.programs.haguichi.enable {
environment.systemPackages = with pkgs; [ haguichi ];
services.logmein-hamachi.enable = true;

View File

@ -1,12 +1,10 @@
{ config, lib, pkgs, ... }:
with lib;
{
meta.maintainers = pkgs.hamster.meta.maintainers;
options.programs.hamster.enable =
mkEnableOption "hamster, a time tracking program";
lib.mkEnableOption "hamster, a time tracking program";
config = lib.mkIf config.programs.hamster.enable {
environment.systemPackages = [ pkgs.hamster ];

View File

@ -1,29 +1,27 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.htop;
fmt = value:
if isList value then concatStringsSep " " (map fmt value) else
if isString value then value else
if isBool value then if value then "1" else "0" else
if isInt value then toString value else
throw "Unrecognized type ${typeOf value} in htop settings";
if builtins.isList value then builtins.concatStringsSep " " (builtins.map fmt value) else
if builtins.isString value then value else
if builtins.isBool value then if value then "1" else "0" else
if builtins.isInt value then builtins.toString value else
throw "Unrecognized type ${builtins.typeOf value} in htop settings";
in
{
options.programs.htop = {
package = mkPackageOption pkgs "htop" { };
package = lib.mkPackageOption pkgs "htop" { };
enable = mkEnableOption "htop process monitor";
enable = lib.mkEnableOption "htop process monitor";
settings = mkOption {
type = with types; attrsOf (oneOf [ str int bool (listOf (oneOf [ str int bool ])) ]);
settings = lib.mkOption {
type = with lib.types; attrsOf (oneOf [ str int bool (listOf (oneOf [ str int bool ])) ]);
default = {};
example = {
hide_kernel_threads = true;
@ -38,7 +36,7 @@ in
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [
cfg.package
];
@ -46,7 +44,7 @@ in
environment.etc."htoprc".text = ''
# Global htop configuration
# To change set: programs.htop.settings.KEY = VALUE;
'' + concatStringsSep "\n" (mapAttrsToList (key: value: "${key}=${fmt value}") cfg.settings);
'' + builtins.concatStringsSep "\n" (lib.mapAttrsToList (key: value: "${key}=${fmt value}") cfg.settings);
};
}

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.i3lock;
@ -12,8 +10,8 @@ in {
options = {
programs.i3lock = {
enable = mkEnableOption "i3lock";
package = mkPackageOption pkgs "i3lock" {
enable = lib.mkEnableOption "i3lock";
package = lib.mkPackageOption pkgs "i3lock" {
example = "i3lock-color";
extraDescription = ''
::: {.note}
@ -21,8 +19,8 @@ in {
:::
'';
};
u2fSupport = mkOption {
type = types.bool;
u2fSupport = lib.mkOption {
type = lib.types.bool;
default = false;
example = true;
description = ''
@ -36,11 +34,11 @@ in {
###### implementation
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
security.wrappers.i3lock = mkIf cfg.u2fSupport {
security.wrappers.i3lock = lib.mkIf cfg.u2fSupport {
setuid = true;
owner = "root";
group = "root";

View File

@ -1,14 +1,12 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.programs.iftop;
in {
options = {
programs.iftop.enable = mkEnableOption "iftop + setcap wrapper";
programs.iftop.enable = lib.mkEnableOption "iftop + setcap wrapper";
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.iftop ];
security.wrappers.iftop = {
owner = "root";

View File

@ -1,14 +1,12 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.programs.iotop;
in {
options = {
programs.iotop.enable = mkEnableOption "iotop + setcap wrapper";
programs.iotop.enable = lib.mkEnableOption "iotop + setcap wrapper";
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
security.wrappers.iotop = {
owner = "root";
group = "root";

View File

@ -3,8 +3,6 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.java;
in
@ -14,7 +12,7 @@ in
programs.java = {
enable = mkEnableOption "java" // {
enable = lib.mkEnableOption "java" // {
description = ''
Install and setup the Java development kit.
@ -30,19 +28,19 @@ in
'';
};
package = mkPackageOption pkgs "jdk" {
package = lib.mkPackageOption pkgs "jdk" {
example = "jre";
};
binfmt = mkEnableOption "binfmt to execute java jar's and classes";
binfmt = lib.mkEnableOption "binfmt to execute java jar's and classes";
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
boot.binfmt.registrations = mkIf cfg.binfmt {
boot.binfmt.registrations = lib.mkIf cfg.binfmt {
java-class = {
recognitionType = "extension";
magicOrExtension = "class";

View File

@ -1,8 +1,7 @@
{ lib, pkgs, config, ... }:
with lib;
{
options.programs.joycond-cemuhook = {
enable = mkEnableOption "joycond-cemuhook, a program to enable support for cemuhook's UDP protocol for joycond devices.";
enable = lib.mkEnableOption "joycond-cemuhook, a program to enable support for cemuhook's UDP protocol for joycond devices.";
};
config = lib.mkIf config.programs.joycond-cemuhook.enable {

View File

@ -1,12 +1,10 @@
{ config, pkgs, lib, ... }:
with lib;
{
# interface
options.programs.k3b = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable k3b, the KDE disk burning application.
@ -22,7 +20,7 @@ with lib;
};
# implementation
config = mkIf config.programs.k3b.enable {
config = lib.mkIf config.programs.k3b.enable {
environment.systemPackages = with pkgs; [
k3b

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.k40-whisperer;
pkg = cfg.package.override {
@ -10,20 +8,20 @@ let
in
{
options.programs.k40-whisperer = {
enable = mkEnableOption "K40-Whisperer";
enable = lib.mkEnableOption "K40-Whisperer";
group = mkOption {
type = types.str;
group = lib.mkOption {
type = lib.types.str;
description = ''
Group assigned to the device when connected.
'';
default = "k40";
};
package = mkPackageOption pkgs "k40-whisperer" { };
package = lib.mkPackageOption pkgs "k40-whisperer" { };
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
users.groups.${cfg.group} = {};
environment.systemPackages = [ pkg ];

View File

@ -1,15 +1,13 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.kbdlight;
in
{
options.programs.kbdlight.enable = mkEnableOption "kbdlight";
options.programs.kbdlight.enable = lib.mkEnableOption "kbdlight";
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.kbdlight ];
security.wrappers.kbdlight =
{ setuid = true;

View File

@ -1,12 +1,11 @@
{ lib, pkgs, config, ... }:
with lib;
let
cfg = config.programs.kclock;
kclockPkg = pkgs.libsForQt5.kclock;
in {
options.programs.kclock = { enable = mkEnableOption "KClock"; };
options.programs.kclock = { enable = lib.mkEnableOption "KClock"; };
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
services.dbus.packages = [ kclockPkg ];
environment.systemPackages = [ kclockPkg ];
};

View File

@ -1,8 +1,7 @@
{ config, pkgs, lib, ... }:
with lib;
{
options.programs.kdeconnect = {
enable = mkEnableOption ''
enable = lib.mkEnableOption ''
kdeconnect.
Note that it will open the TCP and UDP port from
@ -11,7 +10,7 @@ with lib;
`gnomeExtensions.gsconnect` as an alternative
implementation if you use Gnome
'';
package = mkPackageOption pkgs [ "plasma5Packages" "kdeconnect-kde" ] {
package = lib.mkPackageOption pkgs [ "plasma5Packages" "kdeconnect-kde" ] {
example = "gnomeExtensions.gsconnect";
};
};
@ -19,7 +18,7 @@ with lib;
let
cfg = config.programs.kdeconnect;
in
mkIf cfg.enable {
lib.mkIf cfg.enable {
environment.systemPackages = [
cfg.package
pkgs.sshfs

View File

@ -1,26 +1,24 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.less;
configText = if (cfg.configFile != null) then (builtins.readFile cfg.configFile) else ''
#command
${concatStringsSep "\n"
(mapAttrsToList (command: action: "${command} ${action}") cfg.commands)
${builtins.concatStringsSep "\n"
(lib.mapAttrsToList (command: action: "${command} ${action}") cfg.commands)
}
${optionalString cfg.clearDefaultCommands "#stop"}
${lib.optionalString cfg.clearDefaultCommands "#stop"}
#line-edit
${concatStringsSep "\n"
(mapAttrsToList (command: action: "${command} ${action}") cfg.lineEditingKeys)
${builtins.concatStringsSep "\n"
(lib.mapAttrsToList (command: action: "${command} ${action}") cfg.lineEditingKeys)
}
#env
${concatStringsSep "\n"
(mapAttrsToList (variable: values: "${variable}=${values}") cfg.envVariables)
${builtins.concatStringsSep "\n"
(lib.mapAttrsToList (variable: values: "${variable}=${values}") cfg.envVariables)
}
'';
@ -35,12 +33,12 @@ in
# note that environment.nix sets PAGER=less, and
# therefore also enables this module
enable = mkEnableOption "less, a file pager";
enable = lib.mkEnableOption "less, a file pager";
configFile = mkOption {
type = types.nullOr types.path;
configFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
example = literalExpression ''"''${pkgs.my-configs}/lesskey"'';
example = lib.literalExpression ''"''${pkgs.my-configs}/lesskey"'';
description = ''
Path to lesskey configuration file.
@ -50,8 +48,8 @@ in
'';
};
commands = mkOption {
type = types.attrsOf types.str;
commands = lib.mkOption {
type = lib.types.attrsOf lib.types.str;
default = {};
example = {
h = "noaction 5\\e(";
@ -60,8 +58,8 @@ in
description = "Defines new command keys.";
};
clearDefaultCommands = mkOption {
type = types.bool;
clearDefaultCommands = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Clear all default commands.
@ -70,8 +68,8 @@ in
'';
};
lineEditingKeys = mkOption {
type = types.attrsOf types.str;
lineEditingKeys = lib.mkOption {
type = lib.types.attrsOf lib.types.str;
default = {};
example = {
e = "abort";
@ -79,8 +77,8 @@ in
description = "Defines new line-editing keys.";
};
envVariables = mkOption {
type = types.attrsOf types.str;
envVariables = lib.mkOption {
type = lib.types.attrsOf lib.types.str;
default = {
LESS = "-R";
};
@ -90,17 +88,17 @@ in
description = "Defines environment variables.";
};
lessopen = mkOption {
type = types.nullOr types.str;
lessopen = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = "|${pkgs.lesspipe}/bin/lesspipe.sh %s";
defaultText = literalExpression ''"|''${pkgs.lesspipe}/bin/lesspipe.sh %s"'';
defaultText = lib.literalExpression ''"|''${pkgs.lesspipe}/bin/lesspipe.sh %s"'';
description = ''
Before less opens a file, it first gives your input preprocessor a chance to modify the way the contents of the file are displayed.
'';
};
lessclose = mkOption {
type = types.nullOr types.str;
lessclose = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
When less closes a file opened in such a way, it will call another program, called the input postprocessor,
@ -110,26 +108,26 @@ in
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.less ];
environment.variables = {
LESSKEYIN_SYSTEM = toString lessKey;
} // optionalAttrs (cfg.lessopen != null) {
LESSKEYIN_SYSTEM = builtins.toString lessKey;
} // lib.optionalAttrs (cfg.lessopen != null) {
LESSOPEN = cfg.lessopen;
} // optionalAttrs (cfg.lessclose != null) {
} // lib.optionalAttrs (cfg.lessclose != null) {
LESSCLOSE = cfg.lessclose;
};
warnings = optional (
cfg.clearDefaultCommands && (all (x: x != "quit") (attrValues cfg.commands))
warnings = lib.optional (
cfg.clearDefaultCommands && (builtins.all (x: x != "quit") (builtins.attrValues cfg.commands))
) ''
config.programs.less.clearDefaultCommands clears all default commands of less but there is no alternative binding for exiting.
Consider adding a binding for 'quit'.
'';
};
meta.maintainers = with maintainers; [ johnazoidberg ];
meta.maintainers = with lib.maintainers; [ johnazoidberg ];
}

View File

@ -1,16 +1,14 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.liboping;
in {
options.programs.liboping = {
enable = mkEnableOption "liboping";
enable = lib.mkEnableOption "liboping";
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ liboping ];
security.wrappers = mkMerge (map (
security.wrappers = lib.mkMerge (builtins.map (
exec: {
"${exec}" = {
owner = "root";

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.light;
@ -10,9 +8,9 @@ in
options = {
programs.light = {
enable = mkOption {
enable = lib.mkOption {
default = false;
type = types.bool;
type = lib.types.bool;
description = ''
Whether to install Light backlight control command
and udev rules granting access to members of the "video" group.
@ -20,8 +18,8 @@ in
};
brightnessKeys = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable brightness control with keyboard keys.
@ -38,8 +36,8 @@ in
'';
};
step = mkOption {
type = types.int;
step = lib.mkOption {
type = lib.types.int;
default = 10;
description = ''
The percentage value by which to increase/decrease brightness.
@ -51,14 +49,14 @@ in
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.light ];
services.udev.packages = [ pkgs.light ];
services.actkbd = mkIf cfg.brightnessKeys.enable {
services.actkbd = lib.mkIf cfg.brightnessKeys.enable {
enable = true;
bindings = let
light = "${pkgs.light}/bin/light";
step = toString cfg.brightnessKeys.step;
step = builtins.toString cfg.brightnessKeys.step;
in [
{
keys = [ 224 ];

View File

@ -1,14 +1,13 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.programs.mdevctl;
in {
options.programs.mdevctl = {
enable = mkEnableOption "Mediated Device Management";
enable = lib.mkEnableOption "Mediated Device Management";
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ mdevctl ];
environment.etc."mdevctl.d/scripts.d/notifiers/.keep".text = "";

View File

@ -1,15 +1,14 @@
{ pkgs, config, lib, ...}:
with lib;
let
cfg = config.programs.mepo;
in
{
options.programs.mepo = {
enable = mkEnableOption "Mepo, a fast, simple and hackable OSM map viewer";
enable = lib.mkEnableOption "Mepo, a fast, simple and hackable OSM map viewer";
locationBackends = {
gpsd = mkOption {
type = types.bool;
gpsd = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable location detection via gpsd.
@ -17,21 +16,21 @@ in
'';
};
geoclue = mkOption {
type = types.bool;
geoclue = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Whether to enable location detection via geoclue";
};
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
mepo
] ++ lib.optional cfg.locationBackends.geoclue geoclue2-with-demo-agent
++ lib.optional cfg.locationBackends.gpsd gpsd;
services.geoclue2 = mkIf cfg.locationBackends.geoclue {
services.geoclue2 = lib.mkIf cfg.locationBackends.geoclue {
enable = true;
appConfig.where-am-i = {
isAllowed = true;
@ -42,5 +41,5 @@ in
services.gpsd.enable = cfg.locationBackends.gpsd;
};
meta.maintainers = with maintainers; [ laalsaas ];
meta.maintainers = with lib.maintainers; [ laalsaas ];
}

View File

@ -2,15 +2,13 @@
# kernel must have NETNS/VETH/SCHED
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.mininet;
in
{
options.programs.mininet.enable = mkEnableOption "Mininet, an emulator for rapid prototyping of Software Defined Networks";
options.programs.mininet.enable = lib.mkEnableOption "Mininet, an emulator for rapid prototyping of Software Defined Networks";
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
virtualisation.vswitch.enable = true;

View File

@ -1,27 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.msmtp;
in {
meta.maintainers = with maintainers; [ pacien ];
meta.maintainers = with lib.maintainers; [ pacien ];
options = {
programs.msmtp = {
enable = mkEnableOption "msmtp - an SMTP client";
enable = lib.mkEnableOption "msmtp - an SMTP client";
setSendmail = mkOption {
type = types.bool;
setSendmail = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to set the system sendmail to msmtp's.
'';
};
defaults = mkOption {
type = types.attrs;
defaults = lib.mkOption {
type = lib.types.attrs;
default = {};
example = {
aliases = "/etc/aliases";
@ -34,8 +32,8 @@ in {
'';
};
accounts = mkOption {
type = with types; attrsOf attrs;
accounts = lib.mkOption {
type = with lib.types; attrsOf attrs;
default = {};
example = {
"default" = {
@ -59,8 +57,8 @@ in {
'';
};
extraConfig = mkOption {
type = types.lines;
extraConfig = lib.mkOption {
type = lib.types.lines;
default = "";
description = ''
Extra lines to add to the msmtp configuration verbatim.
@ -70,10 +68,10 @@ in {
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.msmtp ];
services.mail.sendmailSetuidWrapper = mkIf cfg.setSendmail {
services.mail.sendmailSetuidWrapper = lib.mkIf cfg.setSendmail {
program = "sendmail";
source = "${pkgs.msmtp}/bin/sendmail";
setuid = false;
@ -86,10 +84,10 @@ in {
mkValueString = v:
if v == true then "on"
else if v == false then "off"
else generators.mkValueStringDefault {} v;
else lib.generators.mkValueStringDefault {} v;
mkKeyValueString = k: v: "${k} ${mkValueString v}";
mkInnerSectionString =
attrs: concatStringsSep "\n" (mapAttrsToList mkKeyValueString attrs);
attrs: builtins.concatStringsSep "\n" (lib.mapAttrsToList mkKeyValueString attrs);
mkAccountString = name: attrs: ''
account ${name}
${mkInnerSectionString attrs}
@ -98,7 +96,7 @@ in {
defaults
${mkInnerSectionString cfg.defaults}
${concatStringsSep "\n" (mapAttrsToList mkAccountString cfg.accounts)}
${builtins.concatStringsSep "\n" (lib.mapAttrsToList mkAccountString cfg.accounts)}
${cfg.extraConfig}
'';

View File

@ -1,15 +1,13 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.mtr;
in {
options = {
programs.mtr = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to add mtr to the global environment and configure a
@ -17,12 +15,12 @@ in {
'';
};
package = mkPackageOption pkgs "mtr" { };
package = lib.mkPackageOption pkgs "mtr" { };
};
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [ cfg.package ];
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
security.wrappers.mtr-packet = {
owner = "root";

View File

@ -1,18 +1,16 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.nbd;
in
{
options = {
programs.nbd = {
enable = mkEnableOption "Network Block Device (nbd) support";
enable = lib.mkEnableOption "Network Block Device (nbd) support";
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ nbd ];
boot.kernelModules = [ "nbd" ];
};

View File

@ -1,14 +1,12 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.neovim;
in
{
options.programs.neovim = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
example = true;
description = ''
@ -21,8 +19,8 @@ in
'';
};
defaultEditor = mkOption {
type = types.bool;
defaultEditor = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
When enabled, installs neovim and configures neovim to be the default editor
@ -30,44 +28,44 @@ in
'';
};
viAlias = mkOption {
type = types.bool;
viAlias = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Symlink {command}`vi` to {command}`nvim` binary.
'';
};
vimAlias = mkOption {
type = types.bool;
vimAlias = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Symlink {command}`vim` to {command}`nvim` binary.
'';
};
withRuby = mkOption {
type = types.bool;
withRuby = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable Ruby provider.";
};
withPython3 = mkOption {
type = types.bool;
withPython3 = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable Python 3 provider.";
};
withNodeJs = mkOption {
type = types.bool;
withNodeJs = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Enable Node provider.";
};
configure = mkOption {
type = types.attrs;
configure = lib.mkOption {
type = lib.types.attrs;
default = { };
example = literalExpression ''
example = lib.literalExpression ''
{
customRC = '''
" here your custom configuration goes!
@ -86,31 +84,31 @@ in
'';
};
package = mkPackageOption pkgs "neovim-unwrapped" { };
package = lib.mkPackageOption pkgs "neovim-unwrapped" { };
finalPackage = mkOption {
type = types.package;
finalPackage = lib.mkOption {
type = lib.types.package;
visible = false;
readOnly = true;
description = "Resulting customized neovim package.";
};
runtime = mkOption {
runtime = lib.mkOption {
default = { };
example = literalExpression ''
example = lib.literalExpression ''
{ "ftplugin/c.vim".text = "setlocal omnifunc=v:lua.vim.lsp.omnifunc"; }
'';
description = ''
Set of files that have to be linked in {file}`runtime`.
'';
type = with types; attrsOf (submodule (
type = with lib.types; attrsOf (submodule (
{ name, config, ... }:
{
options = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether this runtime directory should be generated. This
@ -118,49 +116,49 @@ in
'';
};
target = mkOption {
type = types.str;
target = lib.mkOption {
type = lib.types.str;
description = ''
Name of symlink. Defaults to the attribute
name.
'';
};
text = mkOption {
text = lib.mkOption {
default = null;
type = types.nullOr types.lines;
type = lib.types.nullOr lib.types.lines;
description = "Text of the file.";
};
source = mkOption {
source = lib.mkOption {
default = null;
type = types.nullOr types.path;
type = lib.types.nullOr lib.types.path;
description = "Path of the source file.";
};
};
config.target = mkDefault name;
config.target = lib.mkDefault name;
}
));
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [
cfg.finalPackage
];
environment.variables.EDITOR = mkIf cfg.defaultEditor (mkOverride 900 "nvim");
environment.variables.EDITOR = lib.mkIf cfg.defaultEditor (lib.mkOverride 900 "nvim");
environment.etc = listToAttrs (attrValues (mapAttrs
environment.etc = builtins.listToAttrs (builtins.attrValues (builtins.mapAttrs
(name: value: {
name = "xdg/nvim/${name}";
value = removeAttrs
value = builtins.removeAttrs
(value // {
target = "xdg/nvim/${value.target}";
})
(optionals (isNull value.source) [ "source" ]);
(lib.optionals (builtins.isNull value.source) [ "source" ]);
})
cfg.runtime));

View File

@ -1,16 +1,14 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.programs.nethoscope;
in
{
meta.maintainers = with maintainers; [ _0x4A6F ];
meta.maintainers = with lib.maintainers; [ _0x4A6F ];
options = {
programs.nethoscope = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to add nethoscope to the global environment and configure a
@ -20,7 +18,7 @@ in
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ nethoscope ];
security.wrappers.nethoscope = {
source = "${pkgs.nethoscope}/bin/nethoscope";

View File

@ -1,6 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
nncpCfgFile = "/run/nncp.hjson";
programCfg = config.programs.nncp;
@ -11,10 +10,10 @@ in {
options.programs.nncp = {
enable =
mkEnableOption "NNCP (Node to Node copy) utilities and configuration";
lib.mkEnableOption "NNCP (Node to Node copy) utilities and configuration";
group = mkOption {
type = types.str;
group = lib.mkOption {
type = lib.types.str;
default = "uucp";
description = ''
The group under which NNCP files shall be owned.
@ -23,10 +22,10 @@ in {
'';
};
package = mkPackageOption pkgs "nncp" { };
package = lib.mkPackageOption pkgs "nncp" { };
secrets = mkOption {
type = with types; listOf str;
secrets = lib.mkOption {
type = with lib.types; listOf str;
example = [ "/run/keys/nncp.hjson" ];
description = ''
A list of paths to NNCP configuration files that should not be
@ -35,7 +34,7 @@ in {
'';
};
settings = mkOption {
settings = lib.mkOption {
type = settingsFormat.type;
description = ''
NNCP configuration, see
@ -52,7 +51,7 @@ in {
};
config = mkIf programCfg.enable {
config = lib.mkIf programCfg.enable {
environment = {
systemPackages = [ pkg ];
@ -60,8 +59,8 @@ in {
};
programs.nncp.settings = {
spool = mkDefault "/var/spool/nncp";
log = mkDefault "/var/spool/nncp/log";
spool = lib.mkDefault "/var/spool/nncp";
log = lib.mkDefault "/var/spool/nncp/log";
};
systemd.tmpfiles.rules = [
@ -77,7 +76,7 @@ in {
script = ''
umask u=rw
nncpCfgDir=$(mktemp --directory nncp.XXX)
for f in ${jsonCfgFile} ${toString config.programs.nncp.secrets}; do
for f in ${jsonCfgFile} ${builtins.toString config.programs.nncp.secrets}; do
tmpdir=$(mktemp --directory nncp.XXX)
nncp-cfgdir -cfg $f -dump $tmpdir
find $tmpdir -size 1c -delete

View File

@ -1,17 +1,15 @@
{ config, pkgs, lib, ... }:
with lib;
let cfg = config.programs.noisetorch;
in
{
options.programs.noisetorch = {
enable = mkEnableOption "noisetorch (+ setcap wrapper), a virtual microphone device with noise suppression";
enable = lib.mkEnableOption "noisetorch (+ setcap wrapper), a virtual microphone device with noise suppression";
package = mkPackageOption pkgs "noisetorch" { };
package = lib.mkPackageOption pkgs "noisetorch" { };
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
security.wrappers.noisetorch = {
owner = "root";
group = "root";

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.npm;
in
@ -11,13 +9,13 @@ in
options = {
programs.npm = {
enable = mkEnableOption "{command}`npm` global config";
enable = lib.mkEnableOption "{command}`npm` global config";
package = mkPackageOption pkgs [ "nodePackages" "npm" ] {
package = lib.mkPackageOption pkgs [ "nodePackages" "npm" ] {
example = "nodePackages_13_x.npm";
};
npmrc = mkOption {
npmrc = lib.mkOption {
type = lib.types.lines;
description = ''
The system-wide npm configuration.

View File

@ -1,11 +1,9 @@
{ config, lib, pkgs, ... }:
with lib;
{
imports = [
(mkRemovedOptionModule [ "programs" "oblogout" ] "programs.oblogout has been removed from NixOS. This is because the oblogout repository has been archived upstream.")
(lib.mkRemovedOptionModule [ "programs" "oblogout" ] "programs.oblogout has been removed from NixOS. This is because the oblogout repository has been archived upstream.")
];
}

View File

@ -1,19 +1,17 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.openvpn3;
in
{
options.programs.openvpn3 = {
enable = mkEnableOption "the openvpn3 client";
package = mkOption {
type = types.package;
enable = lib.mkEnableOption "the openvpn3 client";
package = lib.mkOption {
type = lib.types.package;
default = pkgs.openvpn3.override {
enableSystemdResolved = config.services.resolved.enable;
};
defaultText = literalExpression ''pkgs.openvpn3.override {
defaultText = lib.literalExpression ''pkgs.openvpn3.override {
enableSystemdResolved = config.services.resolved.enable;
}'';
description = ''
@ -22,7 +20,7 @@ in
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
services.dbus.packages = [
cfg.package
];

View File

@ -1,19 +1,17 @@
{ config, lib, pkgs, ... }:
with lib;
{
meta = {
maintainers = teams.pantheon.members;
maintainers = lib.teams.pantheon.members;
};
###### interface
options = {
programs.pantheon-tweaks.enable = mkEnableOption "Pantheon Tweaks, an unofficial system settings panel for Pantheon";
programs.pantheon-tweaks.enable = lib.mkEnableOption "Pantheon Tweaks, an unofficial system settings panel for Pantheon";
};
###### implementation
config = mkIf config.programs.pantheon-tweaks.enable {
config = lib.mkIf config.programs.pantheon-tweaks.enable {
services.xserver.desktopManager.pantheon.extraSwitchboardPlugs = [ pkgs.pantheon-tweaks ];
};
}

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.plotinus;
in
@ -15,21 +13,21 @@ in
options = {
programs.plotinus = {
enable = mkOption {
enable = lib.mkOption {
default = false;
description = ''
Whether to enable the Plotinus GTK 3 plugin. Plotinus provides a
popup (triggered by Ctrl-Shift-P) to search the menus of a
compatible application.
'';
type = types.bool;
type = lib.types.bool;
};
};
};
###### implementation
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.sessionVariables.XDG_DATA_DIRS = [ "${pkgs.plotinus}/share/gsettings-schemas/${pkgs.plotinus.name}" ];
environment.variables.GTK3_MODULES = [ "${pkgs.plotinus}/lib/libplotinus.so" ];
};

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.proxychains;
configFile = ''
${cfg.chain.type}_chain
${optionalString (cfg.chain.type == "random")
${lib.optionalString (cfg.chain.type == "random")
"chain_len = ${builtins.toString cfg.chain.length}"}
${optionalString cfg.proxyDNS "proxy_dns"}
${optionalString cfg.quietMode "quiet_mode"}
${lib.optionalString cfg.proxyDNS "proxy_dns"}
${lib.optionalString cfg.quietMode "quiet_mode"}
remote_dns_subnet ${builtins.toString cfg.remoteDNSSubnet}
tcp_read_time_out ${builtins.toString cfg.tcpReadTimeOut}
tcp_connect_time_out ${builtins.toString cfg.tcpConnectTimeOut}
@ -22,20 +21,20 @@ let
proxyOptions = {
options = {
enable = mkEnableOption "this proxy";
enable = lib.mkEnableOption "this proxy";
type = mkOption {
type = types.enum [ "http" "socks4" "socks5" ];
type = lib.mkOption {
type = lib.types.enum [ "http" "socks4" "socks5" ];
description = "Proxy type.";
};
host = mkOption {
type = types.str;
host = lib.mkOption {
type = lib.types.str;
description = "Proxy host or IP address.";
};
port = mkOption {
type = types.port;
port = lib.mkOption {
type = lib.types.port;
description = "Proxy port";
};
};
@ -49,15 +48,15 @@ in {
programs.proxychains = {
enable = mkEnableOption "proxychains configuration";
enable = lib.mkEnableOption "proxychains configuration";
package = mkPackageOption pkgs "proxychains" {
package = lib.mkPackageOption pkgs "proxychains" {
example = "proxychains-ng";
};
chain = {
type = mkOption {
type = types.enum [ "dynamic" "strict" "random" ];
type = lib.mkOption {
type = lib.types.enum [ "dynamic" "strict" "random" ];
default = "strict";
description = ''
`dynamic` - Each connection will be done via chained proxies
@ -75,8 +74,8 @@ in {
(or proxy chain, see {option}`programs.proxychains.chain.length`) from the list.
'';
};
length = mkOption {
type = types.nullOr types.int;
length = lib.mkOption {
type = lib.types.nullOr lib.types.int;
default = null;
description = ''
Chain length for random chain.
@ -84,47 +83,47 @@ in {
};
};
proxyDNS = mkOption {
type = types.bool;
proxyDNS = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Proxy DNS requests - no leak for DNS data.";
};
quietMode = mkEnableOption "Quiet mode (no output from the library)";
quietMode = lib.mkEnableOption "Quiet mode (no output from the library)";
remoteDNSSubnet = mkOption {
type = types.enum [ 10 127 224 ];
remoteDNSSubnet = lib.mkOption {
type = lib.types.enum [ 10 127 224 ];
default = 224;
description = ''
Set the class A subnet number to use for the internal remote DNS mapping, uses the reserved 224.x.x.x range by default.
'';
};
tcpReadTimeOut = mkOption {
type = types.int;
tcpReadTimeOut = lib.mkOption {
type = lib.types.int;
default = 15000;
description = "Connection read time-out in milliseconds.";
};
tcpConnectTimeOut = mkOption {
type = types.int;
tcpConnectTimeOut = lib.mkOption {
type = lib.types.int;
default = 8000;
description = "Connection time-out in milliseconds.";
};
localnet = mkOption {
type = types.str;
localnet = lib.mkOption {
type = lib.types.str;
default = "127.0.0.0/255.0.0.0";
description = "By default enable localnet for loopback address ranges.";
};
proxies = mkOption {
type = types.attrsOf (types.submodule proxyOptions);
proxies = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule proxyOptions);
description = ''
Proxies to be used by proxychains.
'';
example = literalExpression ''
example = lib.literalExpression ''
{ myproxy =
{ type = "socks4";
host = "127.0.0.1";
@ -140,11 +139,11 @@ in {
###### implementation
meta.maintainers = with maintainers; [ sorki ];
meta.maintainers = with lib.maintainers; [ sorki ];
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
assertions = singleton {
assertions = lib.singleton {
assertion = cfg.chain.type != "random" && cfg.chain.length == null;
message = ''
Option `programs.proxychains.chain.length`
@ -152,9 +151,9 @@ in {
'';
};
programs.proxychains.proxies = mkIf config.services.tor.client.enable
programs.proxychains.proxies = lib.mkIf config.services.tor.client.enable
{
torproxy = mkDefault {
torproxy = lib.mkDefault {
enable = true;
type = "socks4";
host = "127.0.0.1";

View File

@ -1,9 +1,7 @@
{ lib, ... }:
with lib;
{
imports = [
(mkRemovedOptionModule [ "programs" "qt5ct" "enable" ] "Use qt5.platformTheme = \"qt5ct\" instead.")
(lib.mkRemovedOptionModule [ "programs" "qt5ct" "enable" ] "Use qt5.platformTheme = \"qt5ct\" instead.")
];
}

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.rust-motd;
format = pkgs.formats.toml { };
@ -24,10 +22,10 @@ let
'';
in {
options.programs.rust-motd = {
enable = mkEnableOption "rust-motd, a Message Of The Day (MOTD) generator";
enableMotdInSSHD = mkOption {
enable = lib.mkEnableOption "rust-motd, a Message Of The Day (MOTD) generator";
enableMotdInSSHD = lib.mkOption {
default = true;
type = types.bool;
type = lib.types.bool;
description = ''
Whether to let `openssh` print the
result when entering a new `ssh`-session.
@ -36,18 +34,18 @@ in {
the latter option is incompatible with this module.
'';
};
refreshInterval = mkOption {
refreshInterval = lib.mkOption {
default = "*:0/5";
type = types.str;
type = lib.types.str;
description = ''
Interval in which the {manpage}`motd(5)` file is refreshed.
For possible formats, please refer to {manpage}`systemd.time(7)`.
'';
};
order = mkOption {
type = types.listOf types.str;
default = attrNames cfg.settings;
defaultText = literalExpression "attrNames cfg.settings";
order = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = builtins.attrNames cfg.settings;
defaultText = lib.literalExpression "attrNames cfg.settings";
description = ''
The order of the sections in [](#opt-programs.rust-motd.settings).
By default they are ordered alphabetically.
@ -79,8 +77,8 @@ in {
makes sure that `uptime` is placed before `banner` in the motd.
'';
};
settings = mkOption {
type = types.attrsOf format.type;
settings = lib.mkOption {
type = lib.types.attrsOf format.type;
description = ''
Settings on what to generate. Please read the
[upstream documentation](https://github.com/rust-motd/rust-motd/blob/main/README.md#configuration)
@ -88,14 +86,14 @@ in {
'';
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
assertions = [
{ assertion = config.users.motd == null;
message = ''
`programs.rust-motd` is incompatible with `users.motd`!
'';
}
{ assertion = sort (a: b: a < b) cfg.order == attrNames cfg.settings;
{ assertion = builtins.sort (a: b: a < b) cfg.order == builtins.attrNames cfg.settings;
message = ''
Please ensure that every section from `programs.rust-motd.settings` is present in
`programs.rust-motd.order`.
@ -138,12 +136,12 @@ in {
wantedBy = [ "timers.target" ];
timerConfig.OnCalendar = cfg.refreshInterval;
};
security.pam.services.sshd.text = mkIf cfg.enableMotdInSSHD (mkDefault (mkAfter ''
security.pam.services.sshd.text = lib.mkIf cfg.enableMotdInSSHD (lib.mkDefault (lib.mkAfter ''
session optional ${pkgs.pam}/lib/security/pam_motd.so motd=/var/lib/rust-motd/motd
''));
services.openssh.extraConfig = mkIf (cfg.settings ? last_login && cfg.settings.last_login != {}) ''
services.openssh.extraConfig = lib.mkIf (cfg.settings ? last_login && cfg.settings.last_login != {}) ''
PrintLastLog no
'';
};
meta.maintainers = with maintainers; [ ma27 ];
meta.maintainers = with lib.maintainers; [ ma27 ];
}

View File

@ -1,14 +1,12 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.sedutil;
in {
options.programs.sedutil.enable = mkEnableOption "sedutil, to manage self encrypting drives that conform to the Trusted Computing Group OPAL 2.0 SSC specification";
options.programs.sedutil.enable = lib.mkEnableOption "sedutil, to manage self encrypting drives that conform to the Trusted Computing Group OPAL 2.0 SSC specification";
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
boot.kernelParams = [
"libata.allow_tpm=1"
];

View File

@ -1,15 +1,14 @@
# Configuration for the pwdutils suite of tools: passwd, useradd, etc.
{ config, lib, utils, pkgs, ... }:
with lib;
let
cfg = config.security.loginDefs;
in
{
options = with types; {
options = with lib.types; {
security.loginDefs = {
package = mkPackageOption pkgs "shadow" { };
package = lib.mkPackageOption pkgs "shadow" { };
chfnRestrict = mkOption {
chfnRestrict = lib.mkOption {
description = ''
Use chfn SUID to allow non-root users to change their account GECOS information.
'';
@ -17,7 +16,7 @@ in
default = null;
};
settings = mkOption {
settings = lib.mkOption {
description = ''
Config options for the /etc/login.defs file, that defines
the site-specific configuration for the shadow password suite.
@ -35,68 +34,68 @@ in
by systemd for features like ConditionUser=@system and systemd-sysusers
*/
options = {
DEFAULT_HOME = mkOption {
DEFAULT_HOME = lib.mkOption {
description = "Indicate if login is allowed if we can't cd to the home directory.";
default = "yes";
type = enum [ "yes" "no" ];
};
ENCRYPT_METHOD = mkOption {
ENCRYPT_METHOD = lib.mkOption {
description = "This defines the system default encryption algorithm for encrypting passwords.";
# The default crypt() method, keep in sync with the PAM default
default = "YESCRYPT";
type = enum [ "YESCRYPT" "SHA512" "SHA256" "MD5" "DES"];
};
SYS_UID_MIN = mkOption {
SYS_UID_MIN = lib.mkOption {
description = "Range of user IDs used for the creation of system users by useradd or newusers.";
default = 400;
type = int;
};
SYS_UID_MAX = mkOption {
SYS_UID_MAX = lib.mkOption {
description = "Range of user IDs used for the creation of system users by useradd or newusers.";
default = 999;
type = int;
};
UID_MIN = mkOption {
UID_MIN = lib.mkOption {
description = "Range of user IDs used for the creation of regular users by useradd or newusers.";
default = 1000;
type = int;
};
UID_MAX = mkOption {
UID_MAX = lib.mkOption {
description = "Range of user IDs used for the creation of regular users by useradd or newusers.";
default = 29999;
type = int;
};
SYS_GID_MIN = mkOption {
SYS_GID_MIN = lib.mkOption {
description = "Range of group IDs used for the creation of system groups by useradd, groupadd, or newusers";
default = 400;
type = int;
};
SYS_GID_MAX = mkOption {
SYS_GID_MAX = lib.mkOption {
description = "Range of group IDs used for the creation of system groups by useradd, groupadd, or newusers";
default = 999;
type = int;
};
GID_MIN = mkOption {
GID_MIN = lib.mkOption {
description = "Range of group IDs used for the creation of regular groups by useradd, groupadd, or newusers.";
default = 1000;
type = int;
};
GID_MAX = mkOption {
GID_MAX = lib.mkOption {
description = "Range of group IDs used for the creation of regular groups by useradd, groupadd, or newusers.";
default = 29999;
type = int;
};
TTYGROUP = mkOption {
TTYGROUP = lib.mkOption {
description = ''
The terminal permissions: the login tty will be owned by the TTYGROUP group,
and the permissions will be set to TTYPERM'';
@ -104,7 +103,7 @@ in
type = str;
};
TTYPERM = mkOption {
TTYPERM = lib.mkOption {
description = ''
The terminal permissions: the login tty will be owned by the TTYGROUP group,
and the permissions will be set to TTYPERM'';
@ -113,7 +112,7 @@ in
};
# Ensure privacy for newly created home directories.
UMASK = mkOption {
UMASK = lib.mkOption {
description = "The file mode creation mask is initialized to this value.";
default = "077";
type = str;
@ -124,7 +123,7 @@ in
};
};
users.defaultUserShell = mkOption {
users.defaultUserShell = lib.mkOption {
description = ''
This option defines the default shell assigned to user
accounts. This can be either a full system path or a shell package.
@ -132,7 +131,7 @@ in
This must not be a store path, since the path is
used outside the store (in particular in /etc/passwd).
'';
example = literalExpression "pkgs.zsh";
example = lib.literalExpression "pkgs.zsh";
type = either path shellPackage;
};
};
@ -160,18 +159,18 @@ in
];
security.loginDefs.settings.CHFN_RESTRICT =
mkIf (cfg.chfnRestrict != null) cfg.chfnRestrict;
lib.mkIf (cfg.chfnRestrict != null) cfg.chfnRestrict;
environment.systemPackages = optional config.users.mutableUsers cfg.package
++ optional (types.shellPackage.check config.users.defaultUserShell) config.users.defaultUserShell
++ optional (cfg.chfnRestrict != null) pkgs.util-linux;
environment.systemPackages = lib.optional config.users.mutableUsers cfg.package
++ lib.optional (lib.types.shellPackage.check config.users.defaultUserShell) config.users.defaultUserShell
++ lib.optional (cfg.chfnRestrict != null) pkgs.util-linux;
environment.etc =
# Create custom toKeyValue generator
# see https://man7.org/linux/man-pages/man5/login.defs.5.html for config specification
let
toKeyValue = generators.toKeyValue {
mkKeyValue = generators.mkKeyValueDefault { } " ";
toKeyValue = lib.generators.toKeyValue {
mkKeyValue = lib.generators.mkKeyValueDefault { } " ";
};
in
{
@ -231,7 +230,7 @@ in
newuidmap = mkSetuidRoot "${cfg.package.out}/bin/newuidmap";
newgidmap = mkSetuidRoot "${cfg.package.out}/bin/newgidmap";
}
// optionalAttrs config.users.mutableUsers {
// lib.optionalAttrs config.users.mutableUsers {
chsh = mkSetuidRoot "${cfg.package.out}/bin/chsh";
passwd = mkSetuidRoot "${cfg.package.out}/bin/passwd";
};

View File

@ -1,8 +1,7 @@
{ config, pkgs, lib, ... }:
with lib;
{
options.programs.sharing = {
enable = mkEnableOption ''
enable = lib.mkEnableOption ''
sharing, a CLI tool for sharing files.
Note that it will opens the 7478 port for TCP in the firewall, which is needed for it to function properly
@ -12,7 +11,7 @@ with lib;
let
cfg = config.programs.sharing;
in
mkIf cfg.enable {
lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.sharing ];
networking.firewall.allowedTCPPorts = [ 7478 ];
};

View File

@ -5,21 +5,20 @@
...
}:
with lib;
let
cfg = config.programs.singularity;
in
{
options.programs.singularity = {
enable = mkEnableOption "singularity" // {
enable = lib.mkEnableOption "singularity" // {
description = ''
Whether to install Singularity/Apptainer with system-level overriding such as SUID support.
'';
};
package = mkPackageOption pkgs "singularity" { example = "apptainer"; };
packageOverriden = mkOption {
type = types.nullOr types.package;
package = lib.mkPackageOption pkgs "singularity" { example = "apptainer"; };
packageOverriden = lib.mkOption {
type = lib.types.nullOr lib.types.package;
default = null;
description = ''
This option provides access to the overridden result of `programs.singularity.package`.
@ -42,8 +41,8 @@ in
Use `lib.mkForce` to forcefully specify the overridden package.
'';
};
enableExternalLocalStateDir = mkOption {
type = types.bool;
enableExternalLocalStateDir = lib.mkOption {
type = lib.types.bool;
default = true;
example = false;
description = ''
@ -54,22 +53,22 @@ in
`/var/lib/''${projectName}/mnt/session`.
'';
};
enableFakeroot = mkOption {
type = types.bool;
enableFakeroot = lib.mkOption {
type = lib.types.bool;
default = true;
example = false;
description = ''
Whether to enable the `--fakeroot` support of Singularity/Apptainer.
'';
};
enableSuid = mkOption {
type = types.bool;
enableSuid = lib.mkOption {
type = lib.types.bool;
# SingularityCE requires SETUID for most things. Apptainer prefers user
# namespaces, e.g. `apptainer exec --nv` would fail if built
# `--with-suid`:
# > `FATAL: nvidia-container-cli not allowed in setuid mode`
default = cfg.package.projectName != "apptainer";
defaultText = literalExpression ''config.services.singularity.package.projectName != "apptainer"'';
defaultText = lib.literalExpression ''config.services.singularity.package.projectName != "apptainer"'';
example = false;
description = ''
Whether to enable the SUID support of Singularity/Apptainer.
@ -77,28 +76,28 @@ in
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
programs.singularity.packageOverriden = (
cfg.package.override (
optionalAttrs cfg.enableExternalLocalStateDir { externalLocalStateDir = "/var/lib"; }
// optionalAttrs cfg.enableFakeroot {
lib.optionalAttrs cfg.enableExternalLocalStateDir { externalLocalStateDir = "/var/lib"; }
// lib.optionalAttrs cfg.enableFakeroot {
newuidmapPath = "/run/wrappers/bin/newuidmap";
newgidmapPath = "/run/wrappers/bin/newgidmap";
}
// optionalAttrs cfg.enableSuid {
// lib.optionalAttrs cfg.enableSuid {
enableSuid = true;
starterSuidPath = "/run/wrappers/bin/${cfg.package.projectName}-suid";
}
)
);
environment.systemPackages = [ cfg.packageOverriden ];
security.wrappers."${cfg.packageOverriden.projectName}-suid" = mkIf cfg.enableSuid {
security.wrappers."${cfg.packageOverriden.projectName}-suid" = lib.mkIf cfg.enableSuid {
setuid = true;
owner = "root";
group = "root";
source = "${cfg.packageOverriden}/libexec/${cfg.packageOverriden.projectName}/bin/starter-suid.orig";
};
systemd.tmpfiles.rules = mkIf cfg.enableExternalLocalStateDir [
systemd.tmpfiles.rules = lib.mkIf cfg.enableExternalLocalStateDir [
"d /var/lib/${cfg.packageOverriden.projectName}/mnt/session 0770 root root -"
];
};

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.slock;
@ -9,18 +7,18 @@ in
{
options = {
programs.slock = {
enable = mkOption {
enable = lib.mkOption {
default = false;
type = types.bool;
type = lib.types.bool;
description = ''
Whether to install slock screen locker with setuid wrapper.
'';
};
package = mkPackageOption pkgs "slock" {};
package = lib.mkPackageOption pkgs "slock" {};
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
security.wrappers.slock =
{ setuid = true;

View File

@ -1,26 +1,24 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.soundmodem;
in
{
options = {
programs.soundmodem = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to add Soundmodem to the global environment and configure a
wrapper for 'soundmodemconfig' for users in the 'soundmodem' group.
'';
};
package = mkPackageOption pkgs "soundmodem" { };
package = lib.mkPackageOption pkgs "soundmodem" { };
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
users.groups.soundmodem = { };

View File

@ -2,8 +2,6 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.programs.spacefm;
in
@ -14,21 +12,21 @@ in
programs.spacefm = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to install SpaceFM and create {file}`/etc/spacefm/spacefm.conf`.
'';
};
settings = mkOption {
type = types.attrs;
settings = lib.mkOption {
type = lib.types.attrs;
default = {
tmp_dir = "/tmp";
terminal_su = "${pkgs.sudo}/bin/sudo";
};
defaultText = literalExpression ''
defaultText = lib.literalExpression ''
{
tmp_dir = "/tmp";
terminal_su = "''${pkgs.sudo}/bin/sudo";
@ -46,10 +44,10 @@ in
###### implementation
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.spaceFM ];
environment.etc."spacefm/spacefm.conf".text =
concatStrings (mapAttrsToList (n: v: "${n}=${toString v}\n") cfg.settings);
lib.concatStrings (lib.mapAttrsToList (n: v: "${n}=${builtins.toString v}\n") cfg.settings);
};
}

View File

@ -2,8 +2,6 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.ssh;
@ -17,16 +15,16 @@ let
exec ${cfg.askPassword} "$@"
'';
knownHosts = attrValues cfg.knownHosts;
knownHosts = builtins.attrValues cfg.knownHosts;
knownHostsText = (flip (concatMapStringsSep "\n") knownHosts
knownHostsText = (lib.flip (lib.concatMapStringsSep "\n") knownHosts
(h: assert h.hostNames != [];
optionalString h.certAuthority "@cert-authority " + concatStringsSep "," h.hostNames + " "
+ (if h.publicKey != null then h.publicKey else readFile h.publicKeyFile)
lib.optionalString h.certAuthority "@cert-authority " + builtins.concatStringsSep "," h.hostNames + " "
+ (if h.publicKey != null then h.publicKey else builtins.readFile h.publicKeyFile)
)) + "\n";
knownHostsFiles = [ "/etc/ssh/ssh_known_hosts" ]
++ map pkgs.copyPathToStore cfg.knownHostsFiles;
++ builtins.map pkgs.copyPathToStore cfg.knownHostsFiles;
in
{
@ -36,21 +34,21 @@ in
programs.ssh = {
enableAskPassword = mkOption {
type = types.bool;
enableAskPassword = lib.mkOption {
type = lib.types.bool;
default = config.services.xserver.enable;
defaultText = literalExpression "config.services.xserver.enable";
defaultText = lib.literalExpression "config.services.xserver.enable";
description = "Whether to configure SSH_ASKPASS in the environment.";
};
askPassword = mkOption {
type = types.str;
askPassword = lib.mkOption {
type = lib.types.str;
default = "${pkgs.x11_ssh_askpass}/libexec/x11-ssh-askpass";
defaultText = literalExpression ''"''${pkgs.x11_ssh_askpass}/libexec/x11-ssh-askpass"'';
defaultText = lib.literalExpression ''"''${pkgs.x11_ssh_askpass}/libexec/x11-ssh-askpass"'';
description = "Program used by SSH to ask for passwords.";
};
forwardX11 = mkOption {
forwardX11 = lib.mkOption {
type = with lib.types; nullOr bool;
default = false;
description = ''
@ -65,25 +63,25 @@ in
'';
};
setXAuthLocation = mkOption {
type = types.bool;
setXAuthLocation = lib.mkOption {
type = lib.types.bool;
description = ''
Whether to set the path to {command}`xauth` for X11-forwarded connections.
This causes a dependency on X11 packages.
'';
};
pubkeyAcceptedKeyTypes = mkOption {
type = types.listOf types.str;
pubkeyAcceptedKeyTypes = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [];
example = [ "ssh-ed25519" "ssh-rsa" ];
description = ''
Specifies the key types that will be used for public key authentication.
Specifies the key lib.types that will be used for public key authentication.
'';
};
hostKeyAlgorithms = mkOption {
type = types.listOf types.str;
hostKeyAlgorithms = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [];
example = [ "ssh-ed25519" "ssh-rsa" ];
description = ''
@ -91,8 +89,8 @@ in
'';
};
extraConfig = mkOption {
type = types.lines;
extraConfig = lib.mkOption {
type = lib.types.lines;
default = "";
description = ''
Extra configuration text prepended to {file}`ssh_config`. Other generated
@ -102,8 +100,8 @@ in
'';
};
startAgent = mkOption {
type = types.bool;
startAgent = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to start the OpenSSH agent when you log in. The OpenSSH agent
@ -113,8 +111,8 @@ in
'';
};
agentTimeout = mkOption {
type = types.nullOr types.str;
agentTimeout = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
example = "1h";
description = ''
@ -122,34 +120,34 @@ in
'';
};
agentPKCS11Whitelist = mkOption {
type = types.nullOr types.str;
agentPKCS11Whitelist = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
example = literalExpression ''"''${pkgs.opensc}/lib/opensc-pkcs11.so"'';
example = lib.literalExpression ''"''${pkgs.opensc}/lib/opensc-pkcs11.so"'';
description = ''
A pattern-list of acceptable paths for PKCS#11 shared libraries
that may be used with the -s option to ssh-add.
'';
};
package = mkPackageOption pkgs "openssh" { };
package = lib.mkPackageOption pkgs "openssh" { };
knownHosts = mkOption {
knownHosts = lib.mkOption {
default = {};
type = types.attrsOf (types.submodule ({ name, config, options, ... }: {
type = lib.types.attrsOf (lib.types.submodule ({ name, config, options, ... }: {
options = {
certAuthority = mkOption {
type = types.bool;
certAuthority = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
This public key is an SSH certificate authority, rather than an
individual host's key.
'';
};
hostNames = mkOption {
type = types.listOf types.str;
hostNames = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ name ] ++ config.extraHostNames;
defaultText = literalExpression "[ ${name} ] ++ config.${options.extraHostNames}";
defaultText = lib.literalExpression "[ ${name} ] ++ config.${options.extraHostNames}";
description = ''
A list of host names and/or IP numbers used for accessing
the host's ssh service. This list includes the name of the
@ -160,8 +158,8 @@ in
`hostNames` list.
'';
};
extraHostNames = mkOption {
type = types.listOf types.str;
extraHostNames = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [];
description = ''
A list of additional host names and/or IP numbers used for
@ -169,9 +167,9 @@ in
`hostNames` is set explicitly.
'';
};
publicKey = mkOption {
publicKey = lib.mkOption {
default = null;
type = types.nullOr types.str;
type = lib.types.nullOr lib.types.str;
example = "ecdsa-sha2-nistp521 AAAAE2VjZHN...UEPg==";
description = ''
The public key data for the host. You can fetch a public key
@ -180,9 +178,9 @@ in
the key type and the key itself.
'';
};
publicKeyFile = mkOption {
publicKeyFile = lib.mkOption {
default = null;
type = types.nullOr types.path;
type = lib.types.nullOr lib.types.path;
description = ''
The path to the public key file for the host. The public
key file is read at build time and saved in the Nix store.
@ -204,7 +202,7 @@ in
`extraHostNames` to add additional host names without
disabling this default.
'';
example = literalExpression ''
example = lib.literalExpression ''
{
myhost = {
extraHostNames = [ "myhost.mydomain.com" "10.10.1.4" ];
@ -219,16 +217,16 @@ in
'';
};
knownHostsFiles = mkOption {
knownHostsFiles = lib.mkOption {
default = [];
type = with types; listOf path;
type = with lib.types; listOf path;
description = ''
Files containing SSH host keys to set as global known hosts.
`/etc/ssh/ssh_known_hosts` (which is
generated by {option}`programs.ssh.knownHosts`) is
always included.
'';
example = literalExpression ''
example = lib.literalExpression ''
[
./known_hosts
(writeText "github.keys" '''
@ -240,8 +238,8 @@ in
'';
};
kexAlgorithms = mkOption {
type = types.nullOr (types.listOf types.str);
kexAlgorithms = lib.mkOption {
type = lib.types.nullOr (lib.types.listOf lib.types.str);
default = null;
example = [ "curve25519-sha256@libssh.org" "diffie-hellman-group-exchange-sha256" ];
description = ''
@ -249,8 +247,8 @@ in
'';
};
ciphers = mkOption {
type = types.nullOr (types.listOf types.str);
ciphers = lib.mkOption {
type = lib.types.nullOr (lib.types.listOf lib.types.str);
default = null;
example = [ "chacha20-poly1305@openssh.com" "aes256-gcm@openssh.com" ];
description = ''
@ -258,8 +256,8 @@ in
'';
};
macs = mkOption {
type = types.nullOr (types.listOf types.str);
macs = lib.mkOption {
type = lib.types.nullOr (lib.types.listOf lib.types.str);
default = null;
example = [ "hmac-sha2-512-etm@openssh.com" "hmac-sha1" ];
description = ''
@ -274,13 +272,13 @@ in
config = {
programs.ssh.setXAuthLocation =
mkDefault (config.services.xserver.enable || config.programs.ssh.forwardX11 == true || config.services.openssh.settings.X11Forwarding);
lib.mkDefault (config.services.xserver.enable || config.programs.ssh.forwardX11 == true || config.services.openssh.settings.X11Forwarding);
assertions =
[ { assertion = cfg.forwardX11 == true -> cfg.setXAuthLocation;
message = "cannot enable X11 forwarding without setting XAuth location";
}
] ++ flip mapAttrsToList cfg.knownHosts (name: data: {
] ++ lib.flip lib.mapAttrsToList cfg.knownHosts (name: data: {
assertion = (data.publicKey == null && data.publicKeyFile != null) ||
(data.publicKey != null && data.publicKeyFile == null);
message = "knownHost ${name} must contain either a publicKey or publicKeyFile";
@ -296,22 +294,22 @@ in
# Generated options from other settings
Host *
AddressFamily ${if config.networking.enableIPv6 then "any" else "inet"}
GlobalKnownHostsFile ${concatStringsSep " " knownHostsFiles}
GlobalKnownHostsFile ${builtins.concatStringsSep " " knownHostsFiles}
${optionalString cfg.setXAuthLocation "XAuthLocation ${pkgs.xorg.xauth}/bin/xauth"}
${lib.optionalString cfg.setXAuthLocation "XAuthLocation ${pkgs.xorg.xauth}/bin/xauth"}
${lib.optionalString (cfg.forwardX11 != null) "ForwardX11 ${if cfg.forwardX11 then "yes" else "no"}"}
${optionalString (cfg.pubkeyAcceptedKeyTypes != []) "PubkeyAcceptedKeyTypes ${concatStringsSep "," cfg.pubkeyAcceptedKeyTypes}"}
${optionalString (cfg.hostKeyAlgorithms != []) "HostKeyAlgorithms ${concatStringsSep "," cfg.hostKeyAlgorithms}"}
${optionalString (cfg.kexAlgorithms != null) "KexAlgorithms ${concatStringsSep "," cfg.kexAlgorithms}"}
${optionalString (cfg.ciphers != null) "Ciphers ${concatStringsSep "," cfg.ciphers}"}
${optionalString (cfg.macs != null) "MACs ${concatStringsSep "," cfg.macs}"}
${lib.optionalString (cfg.pubkeyAcceptedKeyTypes != []) "PubkeyAcceptedKeyTypes ${builtins.concatStringsSep "," cfg.pubkeyAcceptedKeyTypes}"}
${lib.optionalString (cfg.hostKeyAlgorithms != []) "HostKeyAlgorithms ${builtins.concatStringsSep "," cfg.hostKeyAlgorithms}"}
${lib.optionalString (cfg.kexAlgorithms != null) "KexAlgorithms ${builtins.concatStringsSep "," cfg.kexAlgorithms}"}
${lib.optionalString (cfg.ciphers != null) "Ciphers ${builtins.concatStringsSep "," cfg.ciphers}"}
${lib.optionalString (cfg.macs != null) "MACs ${builtins.concatStringsSep "," cfg.macs}"}
'';
environment.etc."ssh/ssh_known_hosts".text = knownHostsText;
# FIXME: this should really be socket-activated for über-awesomeness.
systemd.user.services.ssh-agent = mkIf cfg.startAgent
systemd.user.services.ssh-agent = lib.mkIf cfg.startAgent
{ description = "SSH Agent";
wantedBy = [ "default.target" ];
unitConfig.ConditionUser = "!@system";
@ -319,8 +317,8 @@ in
{ ExecStartPre = "${pkgs.coreutils}/bin/rm -f %t/ssh-agent";
ExecStart =
"${cfg.package}/bin/ssh-agent " +
optionalString (cfg.agentTimeout != null) ("-t ${cfg.agentTimeout} ") +
optionalString (cfg.agentPKCS11Whitelist != null) ("-P ${cfg.agentPKCS11Whitelist} ") +
lib.optionalString (cfg.agentTimeout != null) ("-t ${cfg.agentTimeout} ") +
lib.optionalString (cfg.agentPKCS11Whitelist != null) ("-P ${cfg.agentPKCS11Whitelist} ") +
"-a %t/ssh-agent";
StandardOutput = "null";
Type = "forking";
@ -330,18 +328,18 @@ in
# Allow ssh-agent to ask for confirmation. This requires the
# unit to know about the user's $DISPLAY (via systemctl
# import-environment).
environment.SSH_ASKPASS = optionalString cfg.enableAskPassword askPasswordWrapper;
environment.SSH_ASKPASS = lib.optionalString cfg.enableAskPassword askPasswordWrapper;
environment.DISPLAY = "fake"; # required to make ssh-agent start $SSH_ASKPASS
};
environment.extraInit = optionalString cfg.startAgent
environment.extraInit = lib.optionalString cfg.startAgent
''
if [ -z "$SSH_AUTH_SOCK" -a -n "$XDG_RUNTIME_DIR" ]; then
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent"
fi
'';
environment.variables.SSH_ASKPASS = optionalString cfg.enableAskPassword cfg.askPassword;
environment.variables.SSH_ASKPASS = lib.optionalString cfg.enableAskPassword cfg.askPassword;
};
}

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.steam;
gamescopeCfg = config.programs.gamescope;
@ -11,7 +9,7 @@ let
in
pkgs.writeShellScriptBin "steam-gamescope" ''
${builtins.concatStringsSep "\n" exports}
gamescope --steam ${toString cfg.gamescopeSession.args} -- steam -tenfoot -pipewire-dmabuf
gamescope --steam ${builtins.toString cfg.gamescopeSession.args} -- steam -tenfoot -pipewire-dmabuf
'';
gamescopeSessionFile =
@ -24,13 +22,13 @@ let
'').overrideAttrs (_: { passthru.providedSessions = [ "steam" ]; });
in {
options.programs.steam = {
enable = mkEnableOption "steam";
enable = lib.mkEnableOption "steam";
package = mkOption {
type = types.package;
package = lib.mkOption {
type = lib.types.package;
default = pkgs.steam;
defaultText = literalExpression "pkgs.steam";
example = literalExpression ''
defaultText = lib.literalExpression "pkgs.steam";
example = lib.literalExpression ''
pkgs.steam-small.override {
extraEnv = {
MANGOHUD = true;
@ -44,8 +42,8 @@ in {
'';
apply = steam: steam.override (prev: {
extraEnv = (lib.optionalAttrs (cfg.extraCompatPackages != [ ]) {
STEAM_EXTRA_COMPAT_TOOLS_PATHS = makeSearchPathOutput "steamcompattool" "" cfg.extraCompatPackages;
}) // (optionalAttrs cfg.extest.enable {
STEAM_EXTRA_COMPAT_TOOLS_PATHS = lib.makeSearchPathOutput "steamcompattool" "" cfg.extraCompatPackages;
}) // (lib.optionalAttrs cfg.extest.enable {
LD_PRELOAD = "${pkgs.pkgsi686Linux.extest}/lib/libextest.so";
}) // (prev.extraEnv or {});
extraLibraries = pkgs: let
@ -55,7 +53,7 @@ in {
then [ package ] ++ extraPackages
else [ package32 ] ++ extraPackages32;
in prevLibs ++ additionalLibs;
} // optionalAttrs (cfg.gamescopeSession.enable && gamescopeCfg.capSysNice)
} // lib.optionalAttrs (cfg.gamescopeSession.enable && gamescopeCfg.capSysNice)
{
buildFHSEnv = pkgs.buildFHSEnv.override {
# use the setuid wrapped bubblewrap
@ -71,10 +69,10 @@ in {
'';
};
extraCompatPackages = mkOption {
type = types.listOf types.package;
extraCompatPackages = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [ ];
example = literalExpression ''
example = lib.literalExpression ''
with pkgs; [
proton-ge-bin
]
@ -88,46 +86,46 @@ in {
'';
};
remotePlay.openFirewall = mkOption {
type = types.bool;
remotePlay.openFirewall = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Open ports in the firewall for Steam Remote Play.
'';
};
dedicatedServer.openFirewall = mkOption {
type = types.bool;
dedicatedServer.openFirewall = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Open ports in the firewall for Source Dedicated Server.
'';
};
localNetworkGameTransfers.openFirewall = mkOption {
type = types.bool;
localNetworkGameTransfers.openFirewall = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Open ports in the firewall for Steam Local Network Game Transfers.
'';
};
gamescopeSession = mkOption {
gamescopeSession = lib.mkOption {
description = "Run a GameScope driven Steam session from your display-manager";
default = {};
type = types.submodule {
type = lib.types.submodule {
options = {
enable = mkEnableOption "GameScope Session";
args = mkOption {
type = types.listOf types.str;
enable = lib.mkEnableOption "GameScope Session";
args = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
Arguments to be passed to GameScope for the session.
'';
};
env = mkOption {
type = types.attrsOf types.str;
env = lib.mkOption {
type = lib.types.attrsOf lib.types.str;
default = { };
description = ''
Environmental variables to be passed to GameScope for the session.
@ -137,20 +135,20 @@ in {
};
};
extest.enable = mkEnableOption ''
extest.enable = lib.mkEnableOption ''
Load the extest library into Steam, to translate X11 input events to
uinput events (e.g. for using Steam Input on Wayland)
'';
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
hardware.opengl = { # this fixes the "glXChooseVisual failed" bug, context: https://github.com/NixOS/nixpkgs/issues/47932
enable = true;
driSupport = true;
driSupport32Bit = true;
};
security.wrappers = mkIf (cfg.gamescopeSession.enable && gamescopeCfg.capSysNice) {
security.wrappers = lib.mkIf (cfg.gamescopeSession.enable && gamescopeCfg.capSysNice) {
# needed or steam fails
bwrap = {
owner = "root";
@ -160,8 +158,8 @@ in {
};
};
programs.gamescope.enable = mkDefault cfg.gamescopeSession.enable;
services.displayManager.sessionPackages = mkIf cfg.gamescopeSession.enable [ gamescopeSessionFile ];
programs.gamescope.enable = lib.mkDefault cfg.gamescopeSession.enable;
services.displayManager.sessionPackages = lib.mkIf cfg.gamescopeSession.enable [ gamescopeSessionFile ];
# optionally enable 32bit pulseaudio support if pulseaudio is enabled
hardware.pulseaudio.support32Bit = config.hardware.pulseaudio.enable;
@ -174,25 +172,25 @@ in {
] ++ lib.optional cfg.gamescopeSession.enable steam-gamescope;
networking.firewall = lib.mkMerge [
(mkIf (cfg.remotePlay.openFirewall || cfg.localNetworkGameTransfers.openFirewall) {
(lib.mkIf (cfg.remotePlay.openFirewall || cfg.localNetworkGameTransfers.openFirewall) {
allowedUDPPorts = [ 27036 ]; # Peer discovery
})
(mkIf cfg.remotePlay.openFirewall {
(lib.mkIf cfg.remotePlay.openFirewall {
allowedTCPPorts = [ 27036 ];
allowedUDPPortRanges = [ { from = 27031; to = 27035; } ];
})
(mkIf cfg.dedicatedServer.openFirewall {
(lib.mkIf cfg.dedicatedServer.openFirewall {
allowedTCPPorts = [ 27015 ]; # SRCDS Rcon port
allowedUDPPorts = [ 27015 ]; # Gameplay traffic
})
(mkIf cfg.localNetworkGameTransfers.openFirewall {
(lib.mkIf cfg.localNetworkGameTransfers.openFirewall {
allowedTCPPorts = [ 27040 ]; # Data transfers
})
];
};
meta.maintainers = teams.steam;
meta.maintainers = lib.teams.steam;
}

View File

@ -1,34 +1,32 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.streamdeck-ui;
in
{
options.programs.streamdeck-ui = {
enable = mkEnableOption "streamdeck-ui";
enable = lib.mkEnableOption "streamdeck-ui";
autoStart = mkOption {
autoStart = lib.mkOption {
default = true;
type = types.bool;
type = lib.types.bool;
description = "Whether streamdeck-ui should be started automatically.";
};
package = mkPackageOption pkgs "streamdeck-ui" {
package = lib.mkPackageOption pkgs "streamdeck-ui" {
default = [ "streamdeck-ui" ];
};
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
config = lib.mkIf cfg.enable {
environment.systemPackages = [
cfg.package
(mkIf cfg.autoStart (makeAutostartItem { name = "streamdeck-ui-noui"; package = cfg.package; }))
(lib.mkIf cfg.autoStart (pkgs.makeAutostartItem { name = "streamdeck-ui-noui"; package = cfg.package; }))
];
services.udev.packages = [ cfg.package ];
};
meta.maintainers = with maintainers; [ majiir ];
meta.maintainers = with lib.maintainers; [ majiir ];
}

View File

@ -1,13 +1,11 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.sysdig;
in {
options.programs.sysdig.enable = mkEnableOption "sysdig, a tracing tool";
options.programs.sysdig.enable = lib.mkEnableOption "sysdig, a tracing tool";
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.sysdig ];
boot.extraModulePackages = [ config.boot.kernelPackages.sysdig ];
};

View File

@ -1,7 +1,5 @@
{ config, pkgs, lib, ... }:
with lib;
{
###### interface
@ -10,7 +8,7 @@ with lib;
programs.system-config-printer = {
enable = mkEnableOption "system-config-printer, a Graphical user interface for CUPS administration";
enable = lib.mkEnableOption "system-config-printer, a Graphical user interface for CUPS administration";
};
@ -19,7 +17,7 @@ with lib;
###### implementation
config = mkIf config.programs.system-config-printer.enable {
config = lib.mkIf config.programs.system-config-printer.enable {
environment.systemPackages = [
pkgs.system-config-printer

View File

@ -1,14 +1,12 @@
{ config, lib, ... }:
with lib;
let cfg = config.programs.systemtap;
in {
options = {
programs.systemtap = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Install {command}`systemtap` along with necessary kernel options.
@ -16,7 +14,7 @@ in {
};
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
system.requiredKernelConfig = with config.lib.kernelConfig; [
(isYes "DEBUG")
];

View File

@ -1,7 +1,5 @@
{ config, pkgs, lib, ... }:
with lib;
let
prg = config.programs;
cfg = prg.thefuck;
@ -16,11 +14,11 @@ in
{
options = {
programs.thefuck = {
enable = mkEnableOption "thefuck, an app which corrects your previous console command";
enable = lib.mkEnableOption "thefuck, an app which corrects your previous console command";
alias = mkOption {
alias = lib.mkOption {
default = "fuck";
type = types.str;
type = lib.types.str;
description = ''
`thefuck` needs an alias to be configured.
@ -30,11 +28,11 @@ in
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ thefuck ];
programs.bash.interactiveShellInit = bashAndZshInitScript;
programs.zsh.interactiveShellInit = mkIf prg.zsh.enable bashAndZshInitScript;
programs.fish.interactiveShellInit = mkIf prg.fish.enable fishInitScript;
programs.zsh.interactiveShellInit = lib.mkIf prg.zsh.enable bashAndZshInitScript;
programs.fish.interactiveShellInit = lib.mkIf prg.fish.enable fishInitScript;
};
}

View File

@ -1,29 +1,27 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.programs.thunar;
in {
meta = {
maintainers = teams.xfce.members;
maintainers = lib.teams.xfce.members;
};
options = {
programs.thunar = {
enable = mkEnableOption "Thunar, the Xfce file manager";
enable = lib.mkEnableOption "Thunar, the Xfce file manager";
plugins = mkOption {
plugins = lib.mkOption {
default = [];
type = types.listOf types.package;
type = lib.types.listOf lib.types.package;
description = "List of thunar plugins to install.";
example = literalExpression "with pkgs.xfce; [ thunar-archive-plugin thunar-volman ]";
example = lib.literalExpression "with pkgs.xfce; [ thunar-archive-plugin thunar-volman ]";
};
};
};
config = mkIf cfg.enable (
config = lib.mkIf cfg.enable (
let package = pkgs.xfce.thunar.override { thunarPlugins = cfg.plugins; };
in {

View File

@ -1,14 +1,12 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.traceroute;
in {
options = {
programs.traceroute = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to configure a setcap wrapper for traceroute.
@ -17,7 +15,7 @@ in {
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
security.wrappers.traceroute = {
owner = "root";
group = "root";

View File

@ -2,8 +2,6 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.turbovnc;
in
@ -12,8 +10,8 @@ in
programs.turbovnc = {
ensureHeadlessSoftwareOpenGL = mkOption {
type = types.bool;
ensureHeadlessSoftwareOpenGL = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to set up NixOS such that TurboVNC's built-in software OpenGL
@ -36,7 +34,7 @@ in
};
config = mkIf cfg.ensureHeadlessSoftwareOpenGL {
config = lib.mkIf cfg.ensureHeadlessSoftwareOpenGL {
# TurboVNC has builtin support for Mesa llvmpipe's `swrast`
# software rendering to implement GLX (OpenGL on Xorg).

View File

@ -1,14 +1,12 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.udevil;
in {
options.programs.udevil.enable = mkEnableOption "udevil, to mount filesystems without password";
options.programs.udevil.enable = lib.mkEnableOption "udevil, to mount filesystems without password";
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
security.wrappers.udevil =
{ setuid = true;
owner = "root";

View File

@ -1,15 +1,13 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.programs.usbtop;
in {
options = {
programs.usbtop.enable = mkEnableOption "usbtop and required kernel module, to show estimated USB bandwidth";
programs.usbtop.enable = lib.mkEnableOption "usbtop and required kernel module, to show estimated USB bandwidth";
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
usbtop
];

View File

@ -1,13 +1,11 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.vim;
in {
options.programs.vim = {
defaultEditor = mkOption {
type = types.bool;
defaultEditor = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
When enabled, installs vim and configures vim to be the default editor
@ -15,13 +13,13 @@ in {
'';
};
package = mkPackageOption pkgs "vim" {
package = lib.mkPackageOption pkgs "vim" {
example = "vim-full";
};
};
config = mkIf cfg.defaultEditor {
config = lib.mkIf cfg.defaultEditor {
environment.systemPackages = [ cfg.package ];
environment.variables = { EDITOR = mkOverride 900 "vim"; };
environment.variables = { EDITOR = lib.mkOverride 900 "vim"; };
};
}

View File

@ -1,14 +1,12 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.wavemon;
in {
options = {
programs.wavemon = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to add wavemon to the global environment and configure a
@ -18,7 +16,7 @@ in {
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ wavemon ];
security.wrappers.wavemon = {
owner = "root";

View File

@ -3,7 +3,7 @@
, pkgs
, ...
}:
with lib; let
let
cfg = config.programs.hyprland;
finalPortalPackage = cfg.portalPackage.override {
@ -12,7 +12,7 @@ with lib; let
in
{
options.programs.hyprland = {
enable = mkEnableOption null // {
enable = lib.mkEnableOption null // {
description = ''
Whether to enable Hyprland, the dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
@ -23,26 +23,26 @@ in
'';
};
package = mkPackageOption pkgs "hyprland" { };
package = lib.mkPackageOption pkgs "hyprland" { };
finalPackage = mkOption {
type = types.package;
finalPackage = lib.mkOption {
type = lib.types.package;
readOnly = true;
default = cfg.package.override {
enableXWayland = cfg.xwayland.enable;
};
defaultText = literalExpression
defaultText = lib.literalExpression
"`programs.hyprland.package` with applied configuration";
description = ''
The Hyprland package after applying configuration.
'';
};
portalPackage = mkPackageOption pkgs "xdg-desktop-portal-hyprland" { };
portalPackage = lib.mkPackageOption pkgs "xdg-desktop-portal-hyprland" { };
xwayland.enable = mkEnableOption ("XWayland") // { default = true; };
xwayland.enable = lib.mkEnableOption ("XWayland") // { default = true; };
systemd.setPath.enable = mkEnableOption null // {
systemd.setPath.enable = lib.mkEnableOption null // {
default = true;
example = false;
description = ''
@ -53,15 +53,15 @@ in
};
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.finalPackage ];
fonts.enableDefaultPackages = mkDefault true;
hardware.opengl.enable = mkDefault true;
fonts.enableDefaultPackages = lib.mkDefault true;
hardware.opengl.enable = lib.mkDefault true;
programs = {
dconf.enable = mkDefault true;
xwayland.enable = mkDefault cfg.xwayland.enable;
dconf.enable = lib.mkDefault true;
xwayland.enable = lib.mkDefault cfg.xwayland.enable;
};
security.polkit.enable = true;
@ -69,28 +69,28 @@ in
services.displayManager.sessionPackages = [ cfg.finalPackage ];
xdg.portal = {
enable = mkDefault true;
enable = lib.mkDefault true;
extraPortals = [ finalPortalPackage ];
configPackages = mkDefault [ cfg.finalPackage ];
configPackages = lib.mkDefault [ cfg.finalPackage ];
};
systemd = mkIf cfg.systemd.setPath.enable {
systemd = lib.mkIf cfg.systemd.setPath.enable {
user.extraConfig = ''
DefaultEnvironment="PATH=$PATH:/run/current-system/sw/bin:/etc/profiles/per-user/%u/bin:/run/wrappers/bin"
'';
};
};
imports = with lib; [
(mkRemovedOptionModule
imports = [
(lib.mkRemovedOptionModule
[ "programs" "hyprland" "xwayland" "hidpi" ]
"XWayland patches are deprecated. Refer to https://wiki.hyprland.org/Configuring/XWayland"
)
(mkRemovedOptionModule
(lib.mkRemovedOptionModule
[ "programs" "hyprland" "enableNvidiaPatches" ]
"Nvidia patches are no longer needed"
)
(mkRemovedOptionModule
(lib.mkRemovedOptionModule
[ "programs" "hyprland" "nvidiaPatches" ]
"Nvidia patches are no longer needed"
)

View File

@ -4,13 +4,13 @@
lib,
...
}:
with lib; let
let
cfg = config.programs.river;
in {
options.programs.river = {
enable = mkEnableOption "river, a dynamic tiling Wayland compositor";
enable = lib.mkEnableOption "river, a dynamic tiling Wayland compositor";
package = mkPackageOption pkgs "river" {
package = lib.mkPackageOption pkgs "river" {
nullable = true;
extraDescription = ''
Set to `null` to not add any River package to your path.
@ -18,17 +18,17 @@ in {
'';
};
extraPackages = mkOption {
type = with types; listOf package;
extraPackages = lib.mkOption {
type = with lib.types; listOf package;
default = with pkgs; [
swaylock
foot
dmenu
];
defaultText = literalExpression ''
defaultText = lib.literalExpression ''
with pkgs; [ swaylock foot dmenu ];
'';
example = literalExpression ''
example = lib.literalExpression ''
with pkgs; [
termite rofi light
]
@ -42,15 +42,15 @@ in {
};
config =
mkIf cfg.enable (mkMerge [
lib.mkIf cfg.enable (lib.mkMerge [
{
environment.systemPackages = optional (cfg.package != null) cfg.package ++ cfg.extraPackages;
environment.systemPackages = lib.optional (cfg.package != null) cfg.package ++ cfg.extraPackages;
# To make a river session available if a display manager like SDDM is enabled:
services.displayManager.sessionPackages = optionals (cfg.package != null) [ cfg.package ];
services.displayManager.sessionPackages = lib.optionals (cfg.package != null) [ cfg.package ];
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1050913
xdg.portal.config.river.default = mkDefault [ "wlr" "gtk" ];
xdg.portal.config.river.default = lib.mkDefault [ "wlr" "gtk" ];
}
(import ./wayland-session.nix { inherit lib pkgs; })
]);

Some files were not shown because too many files have changed in this diff Show More