diff options
author | Vladimír Čunát <vcunat@gmail.com> | 2018-08-13 20:42:33 +0200 |
---|---|---|
committer | Vladimír Čunát <vcunat@gmail.com> | 2018-08-13 20:43:59 +0200 |
commit | 5b0398dc36ce5746d8d54e04a1dfcab25939484a (patch) | |
tree | 35dbf68b90a8b5e2cbbbbc3ccfbc2529d4c5ca23 /nixos | |
parent | 34baf00b72ad0932f6a2add6cee88d2e8b7bec8e (diff) | |
parent | 249ba3d3ed76e34f61ab7bb2024b013f3feaafb9 (diff) | |
download | nixpkgs-5b0398dc36ce5746d8d54e04a1dfcab25939484a.tar nixpkgs-5b0398dc36ce5746d8d54e04a1dfcab25939484a.tar.gz nixpkgs-5b0398dc36ce5746d8d54e04a1dfcab25939484a.tar.bz2 nixpkgs-5b0398dc36ce5746d8d54e04a1dfcab25939484a.tar.lz nixpkgs-5b0398dc36ce5746d8d54e04a1dfcab25939484a.tar.xz nixpkgs-5b0398dc36ce5746d8d54e04a1dfcab25939484a.tar.zst nixpkgs-5b0398dc36ce5746d8d54e04a1dfcab25939484a.zip |
Merge branch 'master' into staging-next
Conflicts: gobby and libinfinity - I took the hand-edited versions instead of those resuting from the mass-replacement. Hydra: ?compare=1473190
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/config/shells-environment.nix | 2 | ||||
-rw-r--r-- | nixos/modules/programs/zsh/oh-my-zsh.nix | 52 | ||||
-rw-r--r-- | nixos/modules/programs/zsh/oh-my-zsh.xml | 125 | ||||
-rw-r--r-- | nixos/modules/services/editors/infinoted.nix | 8 | ||||
-rw-r--r-- | nixos/modules/services/x11/display-managers/default.nix | 4 | ||||
-rw-r--r-- | nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py | 2 |
6 files changed, 178 insertions, 15 deletions
diff --git a/nixos/modules/config/shells-environment.nix b/nixos/modules/config/shells-environment.nix index 398660967c5..9dc4749b08d 100644 --- a/nixos/modules/config/shells-environment.nix +++ b/nixos/modules/config/shells-environment.nix @@ -70,7 +70,7 @@ in description = '' Shell script code called during global environment initialisation after all variables and profileVariables have been set. - This code is asumed to be shell-independent, which means you should + This code is assumed to be shell-independent, which means you should stick to pure sh without sh word split. ''; type = types.lines; diff --git a/nixos/modules/programs/zsh/oh-my-zsh.nix b/nixos/modules/programs/zsh/oh-my-zsh.nix index b995d390b27..f4df4e983e4 100644 --- a/nixos/modules/programs/zsh/oh-my-zsh.nix +++ b/nixos/modules/programs/zsh/oh-my-zsh.nix @@ -3,7 +3,30 @@ with lib; let + cfg = config.programs.zsh.ohMyZsh; + + mkLinkFarmEntry = name: dir: + let + env = pkgs.buildEnv { + name = "zsh-${name}-env"; + paths = cfg.customPkgs; + pathsToLink = "/share/zsh/${dir}"; + }; + in + { inherit name; path = "${env}/share/zsh/${dir}"; }; + + mkLinkFarmEntry' = name: mkLinkFarmEntry name name; + + custom = + if cfg.custom != null then cfg.custom + else if length cfg.customPkgs == 0 then null + else pkgs.linkFarm "oh-my-zsh-custom" [ + (mkLinkFarmEntry' "themes") + (mkLinkFarmEntry "completions" "site-functions") + (mkLinkFarmEntry' "plugins") + ]; + in { options = { @@ -34,10 +57,19 @@ in }; custom = mkOption { - default = ""; - type = types.str; + default = null; + type = with types; nullOr str; description = '' Path to a custom oh-my-zsh package to override config of oh-my-zsh. + (Can't be used along with `customPkgs`). + ''; + }; + + customPkgs = mkOption { + default = []; + type = types.listOf types.package; + description = '' + List of custom packages that should be loaded into `oh-my-zsh`. ''; }; @@ -67,7 +99,7 @@ in environment.systemPackages = [ cfg.package ]; - programs.zsh.interactiveShellInit = with builtins; '' + programs.zsh.interactiveShellInit = '' # oh-my-zsh configuration generated by NixOS export ZSH=${cfg.package}/share/oh-my-zsh @@ -75,8 +107,8 @@ in "plugins=(${concatStringsSep " " cfg.plugins})" } - ${optionalString (stringLength(cfg.custom) > 0) - "ZSH_CUSTOM=\"${cfg.custom}\"" + ${optionalString (custom != null) + "ZSH_CUSTOM=\"${custom}\"" } ${optionalString (stringLength(cfg.theme) > 0) @@ -92,5 +124,15 @@ in source $ZSH/oh-my-zsh.sh ''; + + assertions = [ + { + assertion = cfg.custom != null -> cfg.customPkgs == []; + message = "If `cfg.custom` is set for `ZSH_CUSTOM`, `customPkgs` can't be used!"; + } + ]; + }; + + meta.doc = ./oh-my-zsh.xml; } diff --git a/nixos/modules/programs/zsh/oh-my-zsh.xml b/nixos/modules/programs/zsh/oh-my-zsh.xml new file mode 100644 index 00000000000..b74da8630ee --- /dev/null +++ b/nixos/modules/programs/zsh/oh-my-zsh.xml @@ -0,0 +1,125 @@ +<chapter xmlns="http://docbook.org/ns/docbook" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:xi="http://www.w3.org/2001/XInclude" + version="5.0" + xml:id="module-programs-zsh-ohmyzsh"> + +<title>Oh my ZSH</title> + +<para><literal><link xlink:href="https://ohmyz.sh/">oh-my-zsh</link></literal> is a framework +to manage your <link xlink:href="https://www.zsh.org/">ZSH</link> configuration +including completion scripts for several CLI tools or custom prompt themes.</para> + +<section><title>Basic usage</title> +<para>The module uses the <literal>oh-my-zsh</literal> package with all available features. The +initial setup using Nix expressions is fairly similar to the configuration format +of <literal>oh-my-zsh</literal>. + +<programlisting> +{ + programs.ohMyZsh = { + enable = true; + plugins = [ "git" "python" "man" ]; + theme = "agnoster"; + }; +} +</programlisting> + +For a detailed explanation of these arguments please refer to the +<link xlink:href="https://github.com/robbyrussell/oh-my-zsh/wiki"><literal>oh-my-zsh</literal> docs</link>. +</para> +<para>The expression generates the needed +configuration and writes it into your <literal>/etc/zshrc</literal>. +</para></section> + +<section><title>Custom additions</title> + +<para>Sometimes third-party or custom scripts such as a modified theme may be needed. +<literal>oh-my-zsh</literal> provides the +<link xlink:href="https://github.com/robbyrussell/oh-my-zsh/wiki/Customization#overriding-internals"><literal>ZSH_CUSTOM</literal></link> +environment variable for this which points to a directory with additional scripts.</para> + +<para>The module can do this as well: + +<programlisting> +{ + programs.ohMyZsh.custom = "~/path/to/custom/scripts"; +} +</programlisting> +</para></section> + +<section><title>Custom environments</title> + +<para>There are several extensions for <literal>oh-my-zsh</literal> packaged in <literal>nixpkgs</literal>. +One of them is <link xlink:href="https://github.com/spwhitt/nix-zsh-completions">nix-zsh-completions</link> +which bundles completion scripts and a plugin for <literal>oh-my-zsh</literal>.</para> + +<para>Rather than using a single mutable path for <literal>ZSH_CUSTOM</literal>, it's also possible to +generate this path from a list of Nix packages: + +<programlisting> +{ pkgs, ... }: +{ + programs.ohMyZsh.customPkgs = with pkgs; [ + pkgs.nix-zsh-completions + # and even more... + ]; +} +</programlisting> + +Internally a single store path will be created using <literal>buildEnv</literal>. +Please refer to the docs of +<link xlink:href="https://nixos.org/nixpkgs/manual/#sec-building-environment"><literal>buildEnv</literal></link> +for further reference.</para> + +<para><emphasis>Please keep in mind that this is not compatible with <literal>programs.ohMyZsh.custom</literal> +as it requires an immutable store path while <literal>custom</literal> shall remain mutable! An evaluation failure +will be thrown if both <literal>custom</literal> and <literal>customPkgs</literal> are set.</emphasis> +</para></section> + +<section><title>Package your own customizations</title> + +<para>If third-party customizations (e.g. new themes) are supposed to be added to <literal>oh-my-zsh</literal> +there are several pitfalls to keep in mind:</para> + +<itemizedlist> + <listitem> + <para>To comply with the default structure of <literal>ZSH</literal> the entire output needs to be written to + <literal>$out/share/zsh.</literal></para> + </listitem> + <listitem> + <para>Completion scripts are supposed to be stored at <literal>$out/share/zsh/site-functions</literal>. This directory + is part of the <literal><link xlink:href="http://zsh.sourceforge.net/Doc/Release/Functions.html">fpath</link></literal> + and the package should be compatible with pure <literal>ZSH</literal> setups. The module will automatically link + the contents of <literal>site-functions</literal> to completions directory in the proper store path.</para> + </listitem> + <listitem> + <para>The <literal>plugins</literal> directory needs the structure <literal>pluginname/pluginname.plugin.zsh</literal> + as structured in the <link xlink:href="https://github.com/robbyrussell/oh-my-zsh/tree/91b771914bc7c43dd7c7a43b586c5de2c225ceb7/plugins">upstream repo.</link> + </para> + </listitem> +</itemizedlist> + +<para> +A derivation for <literal>oh-my-zsh</literal> may look like this: +<programlisting> +{ stdenv, fetchFromGitHub }: + +stdenv.mkDerivation rec { + name = "exemplary-zsh-customization-${version}"; + version = "1.0.0"; + src = fetchFromGitHub { + # path to the upstream repository + }; + + dontBuild = true; + installPhase = '' + mkdir -p $out/share/zsh/site-functions + cp {themes,plugins} $out/share/zsh + cp completions $out/share/zsh/site-functions + ''; +} +</programlisting> +</para> +</section> +</chapter> diff --git a/nixos/modules/services/editors/infinoted.nix b/nixos/modules/services/editors/infinoted.nix index bba21caca85..9cc8d421270 100644 --- a/nixos/modules/services/editors/infinoted.nix +++ b/nixos/modules/services/editors/infinoted.nix @@ -10,8 +10,8 @@ in { package = mkOption { type = types.package; - default = pkgs.libinfinity.override { daemon = true; }; - defaultText = "pkgs.libinfinity.override { daemon = true; }"; + default = pkgs.libinfinity; + defaultText = "pkgs.libinfinity"; description = '' Package providing infinoted ''; @@ -119,7 +119,7 @@ in { users.groups = optional (cfg.group == "infinoted") { name = "infinoted"; }; - + systemd.services.infinoted = { description = "Gobby Dedicated Server"; @@ -129,7 +129,7 @@ in { serviceConfig = { Type = "simple"; Restart = "always"; - ExecStart = "${cfg.package}/bin/infinoted-${versions.majorMinor cfg.package.version} --config-file=/var/lib/infinoted/infinoted.conf"; + ExecStart = "${cfg.package.infinoted} --config-file=/var/lib/infinoted/infinoted.conf"; User = cfg.user; Group = cfg.group; PermissionsStartOnly = true; diff --git a/nixos/modules/services/x11/display-managers/default.nix b/nixos/modules/services/x11/display-managers/default.nix index 78095e7ce0b..66886f23737 100644 --- a/nixos/modules/services/x11/display-managers/default.nix +++ b/nixos/modules/services/x11/display-managers/default.nix @@ -56,10 +56,6 @@ let # Start PulseAudio if enabled. ${optionalString (config.hardware.pulseaudio.enable) '' - ${optionalString (!config.hardware.pulseaudio.systemWide) - "${config.hardware.pulseaudio.package.out}/bin/pulseaudio --start" - } - # Publish access credentials in the root window. if ${config.hardware.pulseaudio.package.out}/bin/pulseaudio --dump-modules | grep module-x11-publish &> /dev/null; then ${config.hardware.pulseaudio.package.out}/bin/pactl load-module module-x11-publish "display=$DISPLAY" diff --git a/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py b/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py index 1dc888c5822..6016a85ea06 100644 --- a/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py +++ b/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py @@ -42,7 +42,7 @@ def write_loader_conf(profile, generation): else: f.write("default nixos-generation-%d\n" % (generation)) if not @editor@: - f.write("editor 0"); + f.write("editor 0\n"); f.write("console-mode @consoleMode@\n"); os.rename("@efiSysMountPoint@/loader/loader.conf.tmp", "@efiSysMountPoint@/loader/loader.conf") |