Merge pull request #101852 from takagiy/init-wmderland

This commit is contained in:
Sandro 2021-04-12 16:44:46 +02:00 committed by GitHub
commit 512e44abb1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 221 additions and 0 deletions

View file

@ -9497,6 +9497,12 @@
githubId = 321799;
name = "Paul Colomiets";
};
takagiy = {
email = "takagiy.4dev@gmail.com";
github = "takagiy";
githubId = 18656090;
name = "Yuki Takagi";
};
taketwo = {
email = "alexandrov88@gmail.com";
github = "taketwo";

View file

@ -37,6 +37,7 @@ in
./tinywm.nix
./twm.nix
./windowmaker.nix
./wmderland.nix
./wmii.nix
./xmonad.nix
./yeahwm.nix

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
];
example = literalExample ''
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

@ -433,6 +433,7 @@ in
wasabibackend = handleTest ./wasabibackend.nix {};
wiki-js = handleTest ./wiki-js.nix {};
wireguard = handleTest ./wireguard {};
wmderland = handleTest ./wmderland.nix {};
wordpress = handleTest ./wordpress.nix {};
xandikos = handleTest ./xandikos.nix {};
xautolock = handleTest ./xautolock.nix {};

54
nixos/tests/wmderland.nix Normal file
View file

@ -0,0 +1,54 @@
import ./make-test-python.nix ({ pkgs, ...} : {
name = "wmderland";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ takagiy ];
};
machine = { lib, ... }: {
imports = [ ./common/x11.nix ./common/user-account.nix ];
test-support.displayManager.auto.user = "alice";
services.xserver.displayManager.defaultSession = lib.mkForce "none+wmderland";
services.xserver.windowManager.wmderland.enable = true;
systemd.services.setupWmderlandConfig = {
wantedBy = [ "multi-user.target" ];
before = [ "multi-user.target" ];
environment = {
HOME = "/home/alice";
};
unitConfig = {
type = "oneshot";
RemainAfterExit = true;
user = "alice";
};
script = let
config = pkgs.writeText "config" ''
set $Mod = Mod1
bindsym $Mod+Return exec ${pkgs.xterm}/bin/xterm -cm -pc
'';
in ''
mkdir -p $HOME/.config/wmderland
cp ${config} $HOME/.config/wmderland/config
'';
};
};
testScript = { ... }: ''
with subtest("ensure x starts"):
machine.wait_for_x()
machine.wait_for_file("/home/alice/.Xauthority")
machine.succeed("xauth merge ~alice/.Xauthority")
with subtest("ensure we can open a new terminal"):
machine.send_key("alt-ret")
machine.wait_until_succeeds("pgrep xterm")
machine.wait_for_window(r"alice.*?machine")
machine.screenshot("terminal")
with subtest("ensure we can communicate through ipc with wmderlandc"):
# Kills the previously open xterm
machine.succeed("pgrep xterm")
machine.execute("DISPLAY=:0 wmderlandc kill")
machine.fail("pgrep xterm")
'';
})

View file

@ -0,0 +1,13 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 17a4944..33406f3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,7 +10,7 @@ include(BuildType)
# Request C++14 standard, using new CMake variables.
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED True)
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto -Wall")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
# If the BuildType is Debug, then add -rdynamic.
# (used to print stacktrace with function names)

View file

@ -0,0 +1,49 @@
{ lib, stdenv, fetchFromGitHub, cmake, libnotify, libX11, xorgproto, nixosTests }:
stdenv.mkDerivation {
pname = "wmderland";
version = "unstable-2020-07-17";
src = fetchFromGitHub {
owner = "aesophor";
repo = "wmderland";
rev = "a40a3505dd735b401d937203ab6d8d1978307d72";
sha256 = "0npmlnybblp82mfpinjbz7dhwqgpdqc1s63wc1zs8mlcs19pdh98";
};
nativeBuildInputs = [
cmake
];
cmakeBuildType = "MinSizeRel";
patches = [ ./0001-remove-flto.patch ];
postPatch = ''
substituteInPlace src/util.cc \
--replace "notify-send" "${libnotify}/bin/notify-send"
'';
buildInputs = [
libX11
xorgproto
];
postInstall = ''
install -Dm0644 -t $out/share/wmderland/contrib $src/example/config
install -Dm0644 -t $out/share/xsessions $src/example/wmderland.desktop
'';
passthru = {
tests.basic = nixosTests.wmderland;
providedSessions = [ "wmderland" ];
};
meta = with lib; {
description = "Modern and minimal X11 tiling window manager";
homepage = "https://github.com/aesophor/wmderland";
license = licenses.mit;
platforms = libX11.meta.platforms;
maintainers = with maintainers; [ takagiy ];
};
}

View file

@ -0,0 +1,32 @@
{ lib, stdenv, fetchFromGitHub, cmake, libX11, xorgproto }:
stdenv.mkDerivation {
pname = "wmderlandc";
version = "unstable-2020-07-17";
src = fetchFromGitHub {
owner = "aesophor";
repo = "wmderland";
rev = "a40a3505dd735b401d937203ab6d8d1978307d72";
sha256 = "0npmlnybblp82mfpinjbz7dhwqgpdqc1s63wc1zs8mlcs19pdh98";
};
sourceRoot = "source/ipc-client";
nativeBuildInputs = [
cmake
];
buildInputs = [
libX11
xorgproto
];
meta = with lib; {
description = "A tiny program to interact with wmderland";
homepage = "https://github.com/aesophor/wmderland/tree/master/ipc-client";
license = licenses.mit;
platforms = platforms.all;
maintainers = with maintainers; [ takagiy ];
};
}

View file

@ -26580,6 +26580,10 @@ in
wmctrl = callPackage ../tools/X11/wmctrl { };
wmderland = callPackage ../applications/window-managers/wmderland { };
wmderlandc = callPackage ../applications/window-managers/wmderlandc { };
wmii_hg = callPackage ../applications/window-managers/wmii-hg { };
wofi = callPackage ../applications/misc/wofi { };