uboot: (firmwareOdroidC2/C4) don't invoke patch tool, use patches = [] instead

https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/setup.sh#L948
this can do it nicely.

Signed-off-by: Anton Arapov <anton@deadbeef.mx>
This commit is contained in:
Anton Arapov 2021-04-03 12:58:10 +02:00 committed by Alan Daniels
commit 56de2bcd43
30691 changed files with 3076956 additions and 0 deletions

View file

@ -0,0 +1,37 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager."2bwm";
in
{
###### interface
options = {
services.xserver.windowManager."2bwm".enable = mkEnableOption "2bwm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton
{ name = "2bwm";
start =
''
${pkgs._2bwm}/bin/2bwm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs._2bwm ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.afterstep;
in
{
###### interface
options = {
services.xserver.windowManager.afterstep.enable = mkEnableOption "afterstep";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "afterstep";
start = ''
${pkgs.afterstep}/bin/afterstep &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.afterstep ];
};
}

View file

@ -0,0 +1,66 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.awesome;
awesome = cfg.package;
getLuaPath = lib : dir : "${lib}/${dir}/lua/${pkgs.luaPackages.lua.luaversion}";
makeSearchPath = lib.concatMapStrings (path:
" --search " + (getLuaPath path "share") +
" --search " + (getLuaPath path "lib")
);
in
{
###### interface
options = {
services.xserver.windowManager.awesome = {
enable = mkEnableOption "Awesome window manager";
luaModules = mkOption {
default = [];
type = types.listOf types.package;
description = "List of lua packages available for being used in the Awesome configuration.";
example = literalExpression "[ pkgs.luaPackages.vicious ]";
};
package = mkOption {
default = null;
type = types.nullOr types.package;
description = "Package to use for running the Awesome WM.";
apply = pkg: if pkg == null then pkgs.awesome else pkg;
};
noArgb = mkOption {
default = false;
type = types.bool;
description = "Disable client transparency support, which can be greatly detrimental to performance in some setups";
};
};
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton
{ name = "awesome";
start =
''
${awesome}/bin/awesome ${lib.optionalString cfg.noArgb "--no-argb"} ${makeSearchPath cfg.luaModules} &
waitPID=$!
'';
};
environment.systemPackages = [ awesome ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.berry;
in
{
###### interface
options = {
services.xserver.windowManager.berry.enable = mkEnableOption "berry";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "berry";
start = ''
${pkgs.berry}/bin/berry &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.berry ];
};
}

View file

@ -0,0 +1,77 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.bspwm;
in
{
options = {
services.xserver.windowManager.bspwm = {
enable = mkEnableOption "bspwm";
package = mkOption {
type = types.package;
default = pkgs.bspwm;
defaultText = literalExpression "pkgs.bspwm";
example = literalExpression "pkgs.bspwm-unstable";
description = ''
bspwm package to use.
'';
};
configFile = mkOption {
type = with types; nullOr path;
example = literalExpression ''"''${pkgs.bspwm}/share/doc/bspwm/examples/bspwmrc"'';
default = null;
description = ''
Path to the bspwm configuration file.
If null, $HOME/.config/bspwm/bspwmrc will be used.
'';
};
sxhkd = {
package = mkOption {
type = types.package;
default = pkgs.sxhkd;
defaultText = literalExpression "pkgs.sxhkd";
example = literalExpression "pkgs.sxhkd-unstable";
description = ''
sxhkd package to use.
'';
};
configFile = mkOption {
type = with types; nullOr path;
example = literalExpression ''"''${pkgs.bspwm}/share/doc/bspwm/examples/sxhkdrc"'';
default = null;
description = ''
Path to the sxhkd configuration file.
If null, $HOME/.config/sxhkd/sxhkdrc will be used.
'';
};
};
};
};
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "bspwm";
start = ''
export _JAVA_AWT_WM_NONREPARENTING=1
SXHKD_SHELL=/bin/sh ${cfg.sxhkd.package}/bin/sxhkd ${optionalString (cfg.sxhkd.configFile != null) "-c \"${cfg.sxhkd.configFile}\""} &
${cfg.package}/bin/bspwm ${optionalString (cfg.configFile != null) "-c \"${cfg.configFile}\""} &
waitPID=$!
'';
};
environment.systemPackages = [ cfg.package ];
};
imports = [
(mkRemovedOptionModule [ "services" "xserver" "windowManager" "bspwm-unstable" "enable" ]
"Use services.xserver.windowManager.bspwm.enable and set services.xserver.windowManager.bspwm.package to pkgs.bspwm-unstable to use the unstable version of bspwm.")
(mkRemovedOptionModule [ "services" "xserver" "windowManager" "bspwm" "startThroughSession" ]
"bspwm package does not provide bspwm-session anymore.")
(mkRemovedOptionModule [ "services" "xserver" "windowManager" "bspwm" "sessionScript" ]
"bspwm package does not provide bspwm-session anymore.")
];
}

View file

@ -0,0 +1,34 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.clfswm;
in
{
options = {
services.xserver.windowManager.clfswm = {
enable = mkEnableOption "clfswm";
package = mkOption {
type = types.package;
default = pkgs.lispPackages.clfswm;
defaultText = literalExpression "pkgs.lispPackages.clfswm";
description = ''
clfswm package to use.
'';
};
};
};
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "clfswm";
start = ''
${cfg.package}/bin/clfswm &
waitPID=$!
'';
};
environment.systemPackages = [ cfg.package ];
};
}

View file

@ -0,0 +1,23 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.cwm;
in
{
options = {
services.xserver.windowManager.cwm.enable = mkEnableOption "cwm";
};
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton
{ name = "cwm";
start =
''
cwm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.cwm ];
};
}

View file

@ -0,0 +1,88 @@
{ config, lib, ... }:
with lib;
let
cfg = config.services.xserver.windowManager;
in
{
imports = [
./2bwm.nix
./afterstep.nix
./berry.nix
./bspwm.nix
./cwm.nix
./clfswm.nix
./dwm.nix
./e16.nix
./evilwm.nix
./exwm.nix
./fluxbox.nix
./fvwm.nix
./herbstluftwm.nix
./i3.nix
./jwm.nix
./leftwm.nix
./lwm.nix
./metacity.nix
./mlvwm.nix
./mwm.nix
./openbox.nix
./pekwm.nix
./notion.nix
./ratpoison.nix
./sawfish.nix
./smallwm.nix
./stumpwm.nix
./spectrwm.nix
./tinywm.nix
./twm.nix
./windowmaker.nix
./wmderland.nix
./wmii.nix
./xmonad.nix
./yeahwm.nix
./qtile.nix
./none.nix ];
options = {
services.xserver.windowManager = {
session = mkOption {
internal = true;
default = [];
example = [{
name = "wmii";
start = "...";
}];
description = ''
Internal option used to add some common line to window manager
scripts before forwarding the value to the
<varname>displayManager</varname>.
'';
apply = map (d: d // {
manage = "window";
});
};
default = mkOption {
type = types.nullOr types.str;
default = null;
example = "wmii";
description = ''
<emphasis role="strong">Deprecated</emphasis>, please use <xref linkend="opt-services.xserver.displayManager.defaultSession"/> instead.
Default window manager loaded if none have been chosen.
'';
};
};
};
config = {
services.xserver.displayManager.session = cfg.session;
};
}

View file

@ -0,0 +1,37 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.dwm;
in
{
###### interface
options = {
services.xserver.windowManager.dwm.enable = mkEnableOption "dwm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton
{ name = "dwm";
start =
''
dwm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.dwm ];
};
}

View file

@ -0,0 +1,26 @@
{ config , lib , pkgs , ... }:
with lib;
let
cfg = config.services.xserver.windowManager.e16;
in
{
###### interface
options = {
services.xserver.windowManager.e16.enable = mkEnableOption "e16";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "E16";
start = ''
${pkgs.e16}/bin/e16 &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.e16 ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.evilwm;
in
{
###### interface
options = {
services.xserver.windowManager.evilwm.enable = mkEnableOption "evilwm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "evilwm";
start = ''
${pkgs.evilwm}/bin/evilwm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.evilwm ];
};
}

View file

@ -0,0 +1,69 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.exwm;
loadScript = pkgs.writeText "emacs-exwm-load" ''
${cfg.loadScript}
${optionalString cfg.enableDefaultConfig ''
(require 'exwm-config)
(exwm-config-default)
''}
'';
packages = epkgs: cfg.extraPackages epkgs ++ [ epkgs.exwm ];
exwm-emacs = pkgs.emacsWithPackages packages;
in
{
options = {
services.xserver.windowManager.exwm = {
enable = mkEnableOption "exwm";
loadScript = mkOption {
default = "(require 'exwm)";
type = types.lines;
example = ''
(require 'exwm)
(exwm-enable)
'';
description = ''
Emacs lisp code to be run after loading the user's init
file. If enableDefaultConfig is true, this will be run
before loading the default config.
'';
};
enableDefaultConfig = mkOption {
default = true;
type = lib.types.bool;
description = "Enable an uncustomised exwm configuration.";
};
extraPackages = mkOption {
type = types.functionTo (types.listOf types.package);
default = epkgs: [];
defaultText = literalExpression "epkgs: []";
example = literalExpression ''
epkgs: [
epkgs.emms
epkgs.magit
epkgs.proofgeneral
]
'';
description = ''
Extra packages available to Emacs. The value must be a
function which receives the attrset defined in
<varname>emacs.pkgs</varname> as the sole argument.
'';
};
};
};
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "exwm";
start = ''
${exwm-emacs}/bin/emacs -l ${loadScript}
'';
};
environment.systemPackages = [ exwm-emacs ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.fluxbox;
in
{
###### interface
options = {
services.xserver.windowManager.fluxbox.enable = mkEnableOption "fluxbox";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "fluxbox";
start = ''
${pkgs.fluxbox}/bin/startfluxbox &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.fluxbox ];
};
}

View file

@ -0,0 +1,41 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.fvwm;
fvwm = pkgs.fvwm.override { enableGestures = cfg.gestures; };
in
{
###### interface
options = {
services.xserver.windowManager.fvwm = {
enable = mkEnableOption "Fvwm window manager";
gestures = mkOption {
default = false;
type = types.bool;
description = "Whether or not to enable libstroke for gesture support";
};
};
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton
{ name = "fvwm";
start =
''
${fvwm}/bin/fvwm &
waitPID=$!
'';
};
environment.systemPackages = [ fvwm ];
};
}

View file

@ -0,0 +1,47 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.herbstluftwm;
in
{
options = {
services.xserver.windowManager.herbstluftwm = {
enable = mkEnableOption "herbstluftwm";
package = mkOption {
type = types.package;
default = pkgs.herbstluftwm;
defaultText = literalExpression "pkgs.herbstluftwm";
description = ''
Herbstluftwm package to use.
'';
};
configFile = mkOption {
default = null;
type = with types; nullOr path;
description = ''
Path to the herbstluftwm configuration file. If left at the
default value, $XDG_CONFIG_HOME/herbstluftwm/autostart will
be used.
'';
};
};
};
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "herbstluftwm";
start =
let configFileClause = optionalString
(cfg.configFile != null)
''-c "${cfg.configFile}"''
;
in "${cfg.package}/bin/herbstluftwm ${configFileClause}";
};
environment.systemPackages = [ cfg.package ];
};
}

View file

@ -0,0 +1,78 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.i3;
in
{
options.services.xserver.windowManager.i3 = {
enable = mkEnableOption "i3 window manager";
configFile = mkOption {
default = null;
type = with types; nullOr path;
description = ''
Path to the i3 configuration file.
If left at the default value, $HOME/.i3/config will be used.
'';
};
extraSessionCommands = mkOption {
default = "";
type = types.lines;
description = ''
Shell commands executed just before i3 is started.
'';
};
package = mkOption {
type = types.package;
default = pkgs.i3;
defaultText = literalExpression "pkgs.i3";
example = literalExpression "pkgs.i3-gaps";
description = ''
i3 package to use.
'';
};
extraPackages = mkOption {
type = with types; listOf package;
default = with pkgs; [ dmenu i3status i3lock ];
defaultText = literalExpression ''
with pkgs; [
dmenu
i3status
i3lock
]
'';
description = ''
Extra packages to be installed system wide.
'';
};
};
config = mkIf cfg.enable {
services.xserver.windowManager.session = [{
name = "i3";
start = ''
${cfg.extraSessionCommands}
${cfg.package}/bin/i3 ${optionalString (cfg.configFile != null)
"-c /etc/i3/config"
} &
waitPID=$!
'';
}];
environment.systemPackages = [ cfg.package ] ++ cfg.extraPackages;
environment.etc."i3/config" = mkIf (cfg.configFile != null) {
source = cfg.configFile;
};
};
imports = [
(mkRemovedOptionModule [ "services" "xserver" "windowManager" "i3-gaps" "enable" ]
"Use services.xserver.windowManager.i3.enable and set services.xserver.windowManager.i3.package to pkgs.i3-gaps to use i3-gaps.")
];
}

View file

@ -0,0 +1,27 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.icewm;
in
{
###### interface
options = {
services.xserver.windowManager.icewm.enable = mkEnableOption "icewm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton
{ name = "icewm";
start =
''
${pkgs.icewm}/bin/icewm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.icewm ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.jwm;
in
{
###### interface
options = {
services.xserver.windowManager.jwm.enable = mkEnableOption "jwm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "jwm";
start = ''
${pkgs.jwm}/bin/jwm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.jwm ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.leftwm;
in
{
###### interface
options = {
services.xserver.windowManager.leftwm.enable = mkEnableOption "leftwm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "leftwm";
start = ''
${pkgs.leftwm}/bin/leftwm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.leftwm ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.lwm;
in
{
###### interface
options = {
services.xserver.windowManager.lwm.enable = mkEnableOption "lwm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "lwm";
start = ''
${pkgs.lwm}/bin/lwm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.lwm ];
};
}

View file

@ -0,0 +1,30 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.metacity;
inherit (pkgs) gnome;
in
{
options = {
services.xserver.windowManager.metacity.enable = mkEnableOption "metacity";
};
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton
{ name = "metacity";
start = ''
${gnome.metacity}/bin/metacity &
waitPID=$!
'';
};
environment.systemPackages = [ gnome.metacity ];
};
}

View file

@ -0,0 +1,41 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.services.xserver.windowManager.mlvwm;
in
{
options.services.xserver.windowManager.mlvwm = {
enable = mkEnableOption "Macintosh-like Virtual Window Manager";
configFile = mkOption {
default = null;
type = with types; nullOr path;
description = ''
Path to the mlvwm configuration file.
If left at the default value, $HOME/.mlvwmrc will be used.
'';
};
};
config = mkIf cfg.enable {
services.xserver.windowManager.session = [{
name = "mlvwm";
start = ''
${pkgs.mlvwm}/bin/mlvwm ${optionalString (cfg.configFile != null)
"-f /etc/mlvwm/mlvwmrc"
} &
waitPID=$!
'';
}];
environment.etc."mlvwm/mlvwmrc" = mkIf (cfg.configFile != null) {
source = cfg.configFile;
};
environment.systemPackages = [ pkgs.mlvwm ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.mwm;
in
{
###### interface
options = {
services.xserver.windowManager.mwm.enable = mkEnableOption "mwm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "mwm";
start = ''
${pkgs.motif}/bin/mwm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.motif ];
};
}

View file

@ -0,0 +1,12 @@
{
services = {
xserver = {
windowManager = {
session = [{
name = "none";
start = "";
}];
};
};
};
}

View file

@ -0,0 +1,26 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.notion;
in
{
options = {
services.xserver.windowManager.notion.enable = mkEnableOption "notion";
};
config = mkIf cfg.enable {
services.xserver.windowManager = {
session = [{
name = "notion";
start = ''
${pkgs.notion}/bin/notion &
waitPID=$!
'';
}];
};
environment.systemPackages = [ pkgs.notion ];
};
}

View file

@ -0,0 +1,24 @@
{lib, pkgs, config, ...}:
with lib;
let
cfg = config.services.xserver.windowManager.openbox;
in
{
options = {
services.xserver.windowManager.openbox.enable = mkEnableOption "openbox";
};
config = mkIf cfg.enable {
services.xserver.windowManager = {
session = [{
name = "openbox";
start = "
${pkgs.openbox}/bin/openbox-session
";
}];
};
environment.systemPackages = [ pkgs.openbox ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.oroborus;
in
{
###### interface
options = {
services.xserver.windowManager.oroborus.enable = mkEnableOption "oroborus";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "oroborus";
start = ''
${pkgs.oroborus}/bin/oroborus &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.oroborus ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.pekwm;
in
{
###### interface
options = {
services.xserver.windowManager.pekwm.enable = mkEnableOption "pekwm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "pekwm";
start = ''
${pkgs.pekwm}/bin/pekwm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.pekwm ];
};
}

View file

@ -0,0 +1,32 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.qtile;
in
{
options.services.xserver.windowManager.qtile = {
enable = mkEnableOption "qtile";
package = mkPackageOption pkgs "qtile" { };
};
config = mkIf cfg.enable {
services.xserver.windowManager.session = [{
name = "qtile";
start = ''
${cfg.package}/bin/qtile start &
waitPID=$!
'';
}];
environment.systemPackages = [
# pkgs.qtile is currently a buildenv of qtile and its dependencies.
# For userland commands, we want the underlying package so that
# packages such as python don't bleed into userland and overwrite intended behavior.
(cfg.package.unwrapped or cfg.package)
];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.ratpoison;
in
{
###### interface
options = {
services.xserver.windowManager.ratpoison.enable = mkEnableOption "ratpoison";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "ratpoison";
start = ''
${pkgs.ratpoison}/bin/ratpoison &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.ratpoison ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.sawfish;
in
{
###### interface
options = {
services.xserver.windowManager.sawfish.enable = mkEnableOption "sawfish";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "sawfish";
start = ''
${pkgs.sawfish}/bin/sawfish &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.sawfish ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.smallwm;
in
{
###### interface
options = {
services.xserver.windowManager.smallwm.enable = mkEnableOption "smallwm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "smallwm";
start = ''
${pkgs.smallwm}/bin/smallwm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.smallwm ];
};
}

View file

@ -0,0 +1,27 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.spectrwm;
in
{
options = {
services.xserver.windowManager.spectrwm.enable = mkEnableOption "spectrwm";
};
config = mkIf cfg.enable {
services.xserver.windowManager = {
session = [{
name = "spectrwm";
start = ''
${pkgs.spectrwm}/bin/spectrwm &
waitPID=$!
'';
}];
};
environment.systemPackages = [ pkgs.spectrwm ];
};
}

View file

@ -0,0 +1,24 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.stumpwm;
in
{
options = {
services.xserver.windowManager.stumpwm.enable = mkEnableOption "stumpwm";
};
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "stumpwm";
start = ''
${pkgs.lispPackages.stumpwm}/bin/stumpwm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.lispPackages.stumpwm ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.tinywm;
in
{
###### interface
options = {
services.xserver.windowManager.tinywm.enable = mkEnableOption "tinywm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "tinywm";
start = ''
${pkgs.tinywm}/bin/tinywm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.tinywm ];
};
}

View file

@ -0,0 +1,37 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.twm;
in
{
###### interface
options = {
services.xserver.windowManager.twm.enable = mkEnableOption "twm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton
{ name = "twm";
start =
''
${pkgs.xorg.twm}/bin/twm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.xorg.twm ];
};
}

View file

@ -0,0 +1,22 @@
{lib, pkgs, config, ...}:
let
cfg = config.services.xserver.windowManager.windowlab;
in
{
options = {
services.xserver.windowManager.windowlab.enable =
lib.mkEnableOption "windowlab";
};
config = lib.mkIf cfg.enable {
services.xserver.windowManager = {
session =
[{ name = "windowlab";
start = "${pkgs.windowlab}/bin/windowlab";
}];
};
environment.systemPackages = [ pkgs.windowlab ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.windowmaker;
in
{
###### interface
options = {
services.xserver.windowManager.windowmaker.enable = mkEnableOption "windowmaker";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "windowmaker";
start = ''
${pkgs.windowmaker}/bin/wmaker &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.windowmaker ];
};
}

View file

@ -0,0 +1,61 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.wmderland;
in
{
options.services.xserver.windowManager.wmderland = {
enable = mkEnableOption "wmderland";
extraSessionCommands = mkOption {
default = "";
type = types.lines;
description = ''
Shell commands executed just before wmderland is started.
'';
};
extraPackages = mkOption {
type = with types; listOf package;
default = with pkgs; [
rofi
dunst
light
hsetroot
feh
rxvt-unicode
];
defaultText = literalExpression ''
with pkgs; [
rofi
dunst
light
hsetroot
feh
rxvt-unicode
]
'';
description = ''
Extra packages to be installed system wide.
'';
};
};
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "wmderland";
start = ''
${cfg.extraSessionCommands}
${pkgs.wmderland}/bin/wmderland &
waitPID=$!
'';
};
environment.systemPackages = [
pkgs.wmderland pkgs.wmderlandc
] ++ cfg.extraPackages;
};
}

View file

@ -0,0 +1,39 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.wmii;
wmii = pkgs.wmii_hg;
in
{
options = {
services.xserver.windowManager.wmii.enable = mkEnableOption "wmii";
};
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton
# stop wmii by
# $wmiir xwrite /ctl quit
# this will cause wmii exiting with exit code 0
# (or "mod+a quit", which is bound to do the same thing in wmiirc
# by default)
#
# why this loop?
# wmii crashes once a month here. That doesn't matter that much
# wmii can recover very well. However without loop the X session
# terminates and then your workspace setup is lost and all
# applications running on X will terminate.
# Another use case is kill -9 wmii; after rotating screen.
# Note: we don't like kill for that purpose. But it works (->
# subject "wmii and xrandr" on mailinglist)
{ name = "wmii";
start = ''
while :; do
${wmii}/bin/wmii && break
done
'';
};
environment.systemPackages = [ wmii ];
};
}

View file

@ -0,0 +1,204 @@
{pkgs, lib, config, ...}:
with lib;
let
inherit (lib) mkOption mkIf optionals literalExpression optionalString;
cfg = config.services.xserver.windowManager.xmonad;
ghcWithPackages = cfg.haskellPackages.ghcWithPackages;
packages = self: cfg.extraPackages self ++
optionals cfg.enableContribAndExtras
[ self.xmonad-contrib self.xmonad-extras ];
xmonad-vanilla = pkgs.xmonad-with-packages.override {
inherit ghcWithPackages packages;
};
xmonad-config =
let
xmonadAndPackages = self: [ self.xmonad ] ++ packages self;
xmonadEnv = ghcWithPackages xmonadAndPackages;
configured = pkgs.writers.writeHaskellBin "xmonad" {
ghc = cfg.haskellPackages.ghc;
libraries = xmonadAndPackages cfg.haskellPackages;
inherit (cfg) ghcArgs;
} cfg.config;
in
pkgs.runCommandLocal "xmonad" {
nativeBuildInputs = [ pkgs.makeWrapper ];
} (''
install -D ${xmonadEnv}/share/man/man1/xmonad.1.gz $out/share/man/man1/xmonad.1.gz
makeWrapper ${configured}/bin/xmonad $out/bin/xmonad \
'' + optionalString cfg.enableConfiguredRecompile ''
--set NIX_GHC "${xmonadEnv}/bin/ghc" \
'' + ''
--set XMONAD_XMESSAGE "${pkgs.xorg.xmessage}/bin/xmessage"
'');
xmonad = if (cfg.config != null) then xmonad-config else xmonad-vanilla;
in {
meta.maintainers = with maintainers; [ lassulus xaverdh ivanbrennan ];
options = {
services.xserver.windowManager.xmonad = {
enable = mkEnableOption "xmonad";
haskellPackages = mkOption {
default = pkgs.haskellPackages;
defaultText = literalExpression "pkgs.haskellPackages";
example = literalExpression "pkgs.haskell.packages.ghc784";
type = types.attrs;
description = ''
haskellPackages used to build Xmonad and other packages.
This can be used to change the GHC version used to build
Xmonad and the packages listed in
<varname>extraPackages</varname>.
'';
};
extraPackages = mkOption {
type = types.functionTo (types.listOf types.package);
default = self: [];
defaultText = literalExpression "self: []";
example = literalExpression ''
haskellPackages: [
haskellPackages.xmonad-contrib
haskellPackages.monad-logger
]
'';
description = ''
Extra packages available to ghc when rebuilding Xmonad. The
value must be a function which receives the attrset defined
in <varname>haskellPackages</varname> as the sole argument.
'';
};
enableContribAndExtras = mkOption {
default = false;
type = lib.types.bool;
description = "Enable xmonad-{contrib,extras} in Xmonad.";
};
config = mkOption {
default = null;
type = with lib.types; nullOr (either path str);
description = ''
Configuration from which XMonad gets compiled. If no value is
specified, a vanilla xmonad binary is put in PATH, which will
attempt to recompile and exec your xmonad config from $HOME/.xmonad.
This setup is then analogous to other (non-NixOS) linux distributions.
If you do set this option, you likely want to use "launch" as your
entry point for xmonad (as in the example), to avoid xmonad's
recompilation logic on startup. Doing so will render the default
"mod+q" restart key binding dysfunctional though, because that attempts
to call your binary with the "--restart" command line option, unless
you implement that yourself. You way mant to bind "mod+q" to
<literal>(restart "xmonad" True)</literal> instead, which will just restart
xmonad from PATH. This allows e.g. switching to the new xmonad binary
after rebuilding your system with nixos-rebuild.
For the same reason, ghc is not added to the environment when this
option is set, unless <option>enableConfiguredRecompile</option> is
set to <literal>true</literal>.
If you actually want to run xmonad with a config specified here, but
also be able to recompile and restart it from a copy of that source in
$HOME/.xmonad on the fly, set <option>enableConfiguredRecompile</option>
to <literal>true</literal> and implement something like "compileRestart"
from the example.
This should allow you to switch at will between the local xmonad and
the one NixOS puts in your PATH.
'';
example = ''
import XMonad
import XMonad.Util.EZConfig (additionalKeys)
import Control.Monad (when)
import Text.Printf (printf)
import System.Posix.Process (executeFile)
import System.Info (arch,os)
import System.Environment (getArgs)
import System.FilePath ((</>))
compiledConfig = printf "xmonad-%s-%s" arch os
myConfig = defaultConfig
{ modMask = mod4Mask -- Use Super instead of Alt
, terminal = "urxvt" }
`additionalKeys`
[ ( (mod4Mask,xK_r), compileRestart True)
, ( (mod4Mask,xK_q), restart "xmonad" True ) ]
compileRestart resume = do
dirs <- asks directories
whenX (recompile dirs True) $ do
when resume writeStateToFile
catchIO
( do
args <- getArgs
executeFile (cacheDir dirs </> compiledConfig) False args Nothing
)
main = getDirectories >>= launch myConfig
--------------------------------------------
{- For versions before 0.17.0 use this instead -}
--------------------------------------------
-- compileRestart resume =
-- whenX (recompile True) $
-- when resume writeStateToFile
-- *> catchIO
-- ( do
-- dir <- getXMonadDataDir
-- args <- getArgs
-- executeFile (dir </> compiledConfig) False args Nothing
-- )
--
-- main = launch myConfig
--------------------------------------------
'';
};
enableConfiguredRecompile = mkOption {
default = false;
type = lib.types.bool;
description = ''
Enable recompilation even if <option>config</option> is set to a
non-null value. This adds the necessary Haskell dependencies (GHC with
packages) to the xmonad binary's environment.
'';
};
xmonadCliArgs = mkOption {
default = [];
type = with lib.types; listOf str;
description = ''
Command line arguments passed to the xmonad binary.
'';
};
ghcArgs = mkOption {
default = [];
type = with lib.types; listOf str;
description = ''
Command line arguments passed to the compiler (ghc)
invocation when xmonad.config is set.
'';
};
};
};
config = mkIf cfg.enable {
services.xserver.windowManager = {
session = [{
name = "xmonad";
start = ''
systemd-cat -t xmonad -- ${xmonad}/bin/xmonad ${lib.escapeShellArgs cfg.xmonadCliArgs} &
waitPID=$!
'';
}];
};
environment.systemPackages = [ xmonad ];
};
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.yeahwm;
in
{
###### interface
options = {
services.xserver.windowManager.yeahwm.enable = mkEnableOption "yeahwm";
};
###### implementation
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "yeahwm";
start = ''
${pkgs.yeahwm}/bin/yeahwm &
waitPID=$!
'';
};
environment.systemPackages = [ pkgs.yeahwm ];
};
}