summary refs log tree commit diff
path: root/pkgs/applications/window-managers/i3
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/window-managers/i3')
-rw-r--r--pkgs/applications/window-managers/i3/altlayout.nix25
-rw-r--r--pkgs/applications/window-managers/i3/auto-layout.nix26
-rw-r--r--pkgs/applications/window-managers/i3/balance-workspace.nix23
-rw-r--r--pkgs/applications/window-managers/i3/blocks-gaps.nix51
-rw-r--r--pkgs/applications/window-managers/i3/blocks.nix33
-rw-r--r--pkgs/applications/window-managers/i3/default.nix82
-rw-r--r--pkgs/applications/window-managers/i3/easyfocus.nix32
-rw-r--r--pkgs/applications/window-managers/i3/gaps.nix29
-rw-r--r--pkgs/applications/window-managers/i3/i3-ratiosplit.nix26
-rw-r--r--pkgs/applications/window-managers/i3/i3-resurrect.nix22
-rw-r--r--pkgs/applications/window-managers/i3/i3ipc-glib.nix34
-rw-r--r--pkgs/applications/window-managers/i3/layout-manager.nix39
-rw-r--r--pkgs/applications/window-managers/i3/lock-blur.nix22
-rw-r--r--pkgs/applications/window-managers/i3/lock-color.nix61
-rw-r--r--pkgs/applications/window-managers/i3/lock-fancy-rapid.nix32
-rw-r--r--pkgs/applications/window-managers/i3/lock-fancy.nix54
-rw-r--r--pkgs/applications/window-managers/i3/lock.nix37
-rw-r--r--pkgs/applications/window-managers/i3/pystatus.nix59
-rw-r--r--pkgs/applications/window-managers/i3/status-rust.nix63
-rw-r--r--pkgs/applications/window-managers/i3/status.nix23
-rw-r--r--pkgs/applications/window-managers/i3/swallow.nix44
-rw-r--r--pkgs/applications/window-managers/i3/wk-switch.nix31
-rw-r--r--pkgs/applications/window-managers/i3/wmfocus.nix32
-rw-r--r--pkgs/applications/window-managers/i3/workstyle.nix27
-rw-r--r--pkgs/applications/window-managers/i3/wsr.nix33
25 files changed, 940 insertions, 0 deletions
diff --git a/pkgs/applications/window-managers/i3/altlayout.nix b/pkgs/applications/window-managers/i3/altlayout.nix
new file mode 100644
index 00000000000..d66ae357236
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/altlayout.nix
@@ -0,0 +1,25 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "i3altlayout";
+  version = "0.3";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "1h0phf3s6ljffxw0bs73k041wildaz01h37iv5mxhami41wrh4qf";
+  };
+
+  pythonPath = with python3Packages; [ enum-compat i3ipc docopt ];
+
+  doCheck = false;
+
+  pythonImportsCheck = [ "i3altlayout" ];
+
+  meta = with lib; {
+    maintainers = with maintainers; [ magnetophon ];
+    description = "Helps you handle more efficiently your screen real estate in i3wm by auto-splitting windows on their longest side";
+    homepage = "https://github.com/deadc0de6/i3altlayout";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/auto-layout.nix b/pkgs/applications/window-managers/i3/auto-layout.nix
new file mode 100644
index 00000000000..754163547e7
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/auto-layout.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "i3-auto-layout";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "chmln";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0ps08lga6qkgc8cgf5cx2lgwlqcnd2yazphh9xd2fznnzrllfxxz";
+  };
+
+  cargoSha256 = "1i01kqvsykanzs7pi94gab9k2dqg1ki40mmjrwa22n0ypkbnvsmx";
+
+  # Currently no tests are implemented, so we avoid building the package twice
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Automatic, optimal tiling for i3wm";
+    homepage = "https://github.com/chmln/i3-auto-layout";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mephistophiles ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/balance-workspace.nix b/pkgs/applications/window-managers/i3/balance-workspace.nix
new file mode 100644
index 00000000000..f3c2e13fbdc
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/balance-workspace.nix
@@ -0,0 +1,23 @@
+{ lib, buildPythonPackage, fetchPypi, i3ipc }:
+
+buildPythonPackage rec {
+  pname = "i3-balance-workspace";
+  version = "1.8.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-zJdn/Q6r60FQgfehtQfeDkmN0Rz3ZaqgNhiWvjyQFy0=";
+  };
+
+  propagatedBuildInputs = [ i3ipc ];
+
+  doCheck = false;  # project has no test
+  pythonImportsCheck = [ "i3_balance_workspace" ];
+
+  meta = {
+    description = "Balance windows and workspaces in i3wm";
+    homepage = "https://pypi.org/project/i3-balance-workspace/";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ pacien ];
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/blocks-gaps.nix b/pkgs/applications/window-managers/i3/blocks-gaps.nix
new file mode 100644
index 00000000000..4acc2fb669c
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/blocks-gaps.nix
@@ -0,0 +1,51 @@
+{ fetchFromGitHub, lib, stdenv, perl, makeWrapper
+, iproute2, acpi, sysstat, alsa-utils
+, scripts ? [ "bandwidth" "battery" "cpu_usage" "disk" "iface"
+              "load_average" "memory" "volume" "wifi" ]
+}:
+
+with lib;
+
+let
+  perlscripts = [ "battery" "cpu_usage" "openvpn" "temperature" ];
+  contains_any = l1: l2: 0 < length( intersectLists l1 l2 );
+
+in
+stdenv.mkDerivation rec {
+  pname = "i3blocks-gaps";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "Airblader";
+    repo = "i3blocks-gaps";
+    rev = "4cfdf93c75f729a2c96d471004d31734e923812f";
+    sha256 = "0v9307ij8xzwdaxay3r75sd2cp453s3qb6q7dy9fks2p6wwqpazi";
+  };
+
+  makeFlags = [ "all" ];
+  installFlags = [ "PREFIX=\${out}" "VERSION=${version}" ];
+
+  buildInputs = optional (contains_any scripts perlscripts) perl;
+  nativeBuildInputs = [ makeWrapper ];
+
+  postFixup = ''
+    wrapProgram $out/libexec/i3blocks/bandwidth \
+      --prefix PATH : ${makeBinPath (optional (elem "bandwidth" scripts) iproute2)}
+    wrapProgram $out/libexec/i3blocks/battery \
+      --prefix PATH : ${makeBinPath (optional (elem "battery" scripts) acpi)}
+    wrapProgram $out/libexec/i3blocks/cpu_usage \
+      --prefix PATH : ${makeBinPath (optional (elem "cpu_usage" scripts) sysstat)}
+    wrapProgram $out/libexec/i3blocks/iface \
+      --prefix PATH : ${makeBinPath (optional (elem "iface" scripts) iproute2)}
+    wrapProgram $out/libexec/i3blocks/volume \
+      --prefix PATH : ${makeBinPath (optional (elem "volume" scripts) alsa-utils)}
+  '';
+
+  meta = with lib; {
+    description = "A flexible scheduler for your i3bar blocks -- this is a fork to use with i3-gaps";
+    homepage = "https://github.com/Airblader/i3blocks-gaps";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ carlsverre ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/blocks.nix b/pkgs/applications/window-managers/i3/blocks.nix
new file mode 100644
index 00000000000..1574c587743
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/blocks.nix
@@ -0,0 +1,33 @@
+{ fetchFromGitHub, fetchpatch, lib, stdenv, autoreconfHook, pkg-config }:
+
+with lib;
+
+stdenv.mkDerivation {
+  pname = "i3blocks";
+  version = "1.5";
+
+  src = fetchFromGitHub {
+    owner = "vivien";
+    repo = "i3blocks";
+    rev = "3417602a2d8322bc866861297f535e1ef80b8cb0";
+    sha256 = "0v8mwnm8qzpv6xnqvrk43s4b9iyld4naqzbaxk4ldq1qkhai0wsv";
+  };
+
+  patches = [
+    # XDG_CONFIG_DIRS can contain multiple elements separated by colons, which should be searched in order.
+    (fetchpatch {
+      # https://github.com/vivien/i3blocks/pull/405
+      url = "https://github.com/edef1c/i3blocks/commit/d57b32f9a364aeaf36869efdd54240433c737e57.patch";
+      sha256 = "102xb0ax0hmg82dz2gzfag470dkckzf2yizai0izacvrz0d3ngj1";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  meta = {
+    description = "A flexible scheduler for your i3bar blocks";
+    homepage = "https://github.com/vivien/i3blocks";
+    license = licenses.gpl3;
+    platforms = with platforms; freebsd ++ linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/default.nix b/pkgs/applications/window-managers/i3/default.nix
new file mode 100644
index 00000000000..5c2db7d47a5
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/default.nix
@@ -0,0 +1,82 @@
+{ fetchurl, lib, stdenv, pkg-config, makeWrapper, meson, ninja, installShellFiles, libxcb, xcbutilkeysyms
+, xcbutil, xcbutilwm, xcbutilxrm, libstartup_notification, libX11, pcre, libev
+, yajl, xcb-util-cursor, perl, pango, perlPackages, libxkbcommon
+, xorgserver, xvfb-run
+, asciidoc, xmlto, docbook_xml_dtd_45, docbook_xsl, findXMLCatalogs
+}:
+
+stdenv.mkDerivation rec {
+  pname = "i3";
+  version = "4.20.1";
+
+  src = fetchurl {
+    url = "https://i3wm.org/downloads/${pname}-${version}.tar.xz";
+    sha256 = "1rpwdgykcvmrmdz244f0wm7446ih1dcw8rlc1hm1c7cc42pyrq93";
+  };
+
+  nativeBuildInputs = [
+    pkg-config makeWrapper meson ninja installShellFiles perl
+    asciidoc xmlto docbook_xml_dtd_45 docbook_xsl findXMLCatalogs
+  ];
+
+  mesonFlags = [
+    "-Ddocs=true"
+    "-Dmans=true"
+  ];
+
+  buildInputs = [
+    libxcb xcbutilkeysyms xcbutil xcbutilwm xcbutilxrm libxkbcommon
+    libstartup_notification libX11 pcre libev yajl xcb-util-cursor perl pango
+    perlPackages.AnyEventI3 perlPackages.X11XCB perlPackages.IPCRun
+    perlPackages.ExtUtilsPkgConfig perlPackages.InlineC
+    xorgserver xvfb-run
+  ];
+
+  configureFlags = [ "--disable-builddir" ];
+
+  postPatch = ''
+    patchShebangs .
+  '';
+
+  # Tests have been failing (at least for some people in some cases)
+  # and have been disabled until someone wants to fix them. Some
+  # initial digging uncovers that the tests call out to `git`, which
+  # they shouldn't, and then even once that's fixed have some
+  # perl-related errors later on. For more, see
+  # https://github.com/NixOS/nixpkgs/issues/7957
+  doCheck = false; # stdenv.hostPlatform.system == "x86_64-linux";
+
+  checkPhase = lib.optionalString (stdenv.hostPlatform.system == "x86_64-linux")
+  ''
+    (cd testcases && xvfb-run ./complete-run.pl -p 1 --keep-xserver-output)
+    ! grep -q '^not ok' testcases/latest/complete-run.log
+  '';
+
+  postInstall = ''
+    wrapProgram "$out/bin/i3-save-tree" --prefix PERL5LIB ":" "$PERL5LIB"
+    for program in $out/bin/i3-sensible-*; do
+      sed -i 's/which/command -v/' $program
+    done
+
+    installManPage man/*.1
+  '';
+
+  separateDebugInfo = true;
+
+  meta = with lib; {
+    description = "A tiling window manager";
+    homepage    = "https://i3wm.org";
+    maintainers = with maintainers; [ modulistic fpletz globin ];
+    license     = licenses.bsd3;
+    platforms   = platforms.all;
+
+    longDescription = ''
+      A tiling window manager primarily targeted at advanced users and
+      developers. Based on a tree as data structure, supports tiling,
+      stacking, and tabbing layouts, handled dynamically, as well as
+      floating windows. Configured via plain text file. Multi-monitor.
+      UTF-8 clean.
+    '';
+  };
+
+}
diff --git a/pkgs/applications/window-managers/i3/easyfocus.nix b/pkgs/applications/window-managers/i3/easyfocus.nix
new file mode 100644
index 00000000000..a2ee445eaf1
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/easyfocus.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, xorgproto, libxcb, xcbutilkeysyms
+, xorg , i3ipc-glib , glib
+}:
+
+stdenv.mkDerivation {
+  pname = "i3easyfocus";
+  version = "20190411";
+
+  src = fetchFromGitHub {
+    owner = "cornerman";
+    repo = "i3-easyfocus";
+    rev = "fffb468f7274f9d7c9b92867c8cb9314ec6cf81a";
+    sha256 = "1db23vzzmp0hnfss1fkd80za6d2pajx7hdwikw50pk95jq0w8wfm";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libxcb xcbutilkeysyms xorgproto xorg.libX11.dev i3ipc-glib glib.dev ];
+
+  # Makefile has no rule for 'install'
+  installPhase = ''
+    mkdir -p $out/bin
+    cp i3-easyfocus $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Focus and select windows in i3";
+    homepage = "https://github.com/cornerman/i3-easyfocus";
+    maintainers = with maintainers; [teto];
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/gaps.nix b/pkgs/applications/window-managers/i3/gaps.nix
new file mode 100644
index 00000000000..faa325023f9
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/gaps.nix
@@ -0,0 +1,29 @@
+{ fetchFromGitHub, lib, i3 }:
+
+i3.overrideAttrs (oldAttrs : rec {
+  pname = "i3-gaps";
+  version = "4.20.1";
+
+  src = fetchFromGitHub {
+    owner = "Airblader";
+    repo = "i3";
+    rev = version;
+    sha256 = "sha256-aS1dLs8KxoJaTf3RlQX+zRrtNmHEFZgkXDjt+8SuGDw=";
+  };
+
+  meta = with lib; {
+    description = "A fork of the i3 tiling window manager with some additional features";
+    homepage    = "https://github.com/Airblader/i3";
+    maintainers = with maintainers; [ fmthoma ];
+    license     = licenses.bsd3;
+    platforms   = platforms.linux ++ platforms.netbsd ++ platforms.openbsd;
+
+    longDescription = ''
+      Fork of i3wm, a tiling window manager primarily targeted at advanced users
+      and developers. Based on a tree as data structure, supports tiling,
+      stacking, and tabbing layouts, handled dynamically, as well as floating
+      windows. This fork adds a few features such as gaps between windows.
+      Configured via plain text file. Multi-monitor. UTF-8 clean.
+    '';
+  };
+})
diff --git a/pkgs/applications/window-managers/i3/i3-ratiosplit.nix b/pkgs/applications/window-managers/i3/i3-ratiosplit.nix
new file mode 100644
index 00000000000..fbd584f2baa
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/i3-ratiosplit.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "i3-ratiosplit";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "333fred";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0yfmr5zk2c2il9d31yjjbr48sqgcq6hp4a99hl5mjm2ajyhy5bz3";
+  };
+
+  cargoSha256 = "134sgc9d0j57swknl9sgil6212rws2hhp92s3cg1yzz5ygx21c76";
+
+  # Currently no tests are implemented, so we avoid building the package twice
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Resize newly created windows";
+    homepage = "https://github.com/333fred/i3-ratiosplit";
+    license = licenses.mit;
+    maintainers = with maintainers; [ svrana ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/i3-resurrect.nix b/pkgs/applications/window-managers/i3/i3-resurrect.nix
new file mode 100644
index 00000000000..a765d2e298e
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/i3-resurrect.nix
@@ -0,0 +1,22 @@
+{ lib, buildPythonApplication, click, i3ipc, psutil, natsort, fetchPypi, xprop, xdotool, importlib-metadata }:
+
+buildPythonApplication rec {
+  pname = "i3-resurrect";
+  version = "1.4.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0h181frdwpqfj9agw43qgicdvzv1i7xwky0vs0ksd8h18qxqp4hr";
+  };
+
+  propagatedBuildInputs = [ click psutil xprop natsort i3ipc xdotool importlib-metadata ];
+  doCheck = false; # no tests
+
+  meta = with lib; {
+    homepage = "https://github.com/JonnyHaystack/i3-resurrect";
+    description = "A simple but flexible solution to saving and restoring i3 workspaces";
+    license = licenses.gpl3;
+    platforms= platforms.linux;
+    maintainers = with maintainers; [ magnetophon ];
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/i3ipc-glib.nix b/pkgs/applications/window-managers/i3/i3ipc-glib.nix
new file mode 100644
index 00000000000..572b12d986c
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/i3ipc-glib.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, xorgproto, libxcb
+, autoreconfHook, json-glib, gtk-doc, which
+, gobject-introspection
+}:
+
+stdenv.mkDerivation rec {
+
+  pname = "i3ipc-glib";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "acrisci";
+    repo = "i3ipc-glib";
+    rev = "v${version}";
+    sha256 = "01fzvrbnzcwx0vxw29igfpza9zwzp2s7msmzb92v01z0rz0y5m0p";
+  };
+
+  nativeBuildInputs = [ autoreconfHook which pkg-config ];
+
+  buildInputs = [ libxcb json-glib gtk-doc xorgproto gobject-introspection ];
+
+
+  preAutoreconf = ''
+    gtkdocize
+  '';
+
+  meta = with lib; {
+    description = "A C interface library to i3wm";
+    homepage = "https://github.com/acrisci/i3ipc-glib";
+    maintainers = with maintainers; [teto];
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/layout-manager.nix b/pkgs/applications/window-managers/i3/layout-manager.nix
new file mode 100644
index 00000000000..8fd0364bb58
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/layout-manager.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, vim, makeWrapper, jq, rofi, xrandr, xdotool, i3, gawk, libnotify }:
+
+let
+  path = lib.makeBinPath [ vim jq rofi xrandr xdotool i3 gawk libnotify ];
+in
+
+stdenv.mkDerivation rec {
+  pname = "i3-layout-manager";
+  version = "unstable-2020-05-04";
+
+  src = fetchFromGitHub {
+    owner = "klaxalk";
+    repo = pname;
+    rev = "df54826bba351d8bcd7ebeaf26c07c713af7912c";
+    sha256 = "0ccvr43yp26fnh5d82cw7jcfq2sbxzzmdx2cp15bmxr8ixr8knc3";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D layout_manager.sh $out/bin/layout_manager
+    wrapProgram $out/bin/layout_manager \
+      --prefix PATH : "${path}"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/klaxalk/i3-layout-manager";
+    description = "Saving, loading and managing layouts for i3wm";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/lock-blur.nix b/pkgs/applications/window-managers/i3/lock-blur.nix
new file mode 100644
index 00000000000..4018a34b571
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/lock-blur.nix
@@ -0,0 +1,22 @@
+{ i3lock-color, lib, stdenv, fetchFromGitHub }:
+
+i3lock-color.overrideAttrs (oldAttrs : rec {
+  pname = "i3lock-blur";
+  version = "2.10";
+
+  src = fetchFromGitHub {
+    owner = "karulont";
+    repo = "i3lock-blur";
+    rev = version;
+    sha256 = "sha256-rBQHYVD9rurzTEXrgEnOziOP22D2EePC1+EV9Wi2pa0=";
+  };
+
+  meta = with lib; {
+    description = "An improved screenlocker based upon XCB and PAM with background blurring filter";
+    homepage = "https://github.com/karulont/i3lock-blur/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.all;
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/i3lock-blur.x86_64-darwin
+  };
+})
diff --git a/pkgs/applications/window-managers/i3/lock-color.nix b/pkgs/applications/window-managers/i3/lock-color.nix
new file mode 100644
index 00000000000..7f08891385b
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/lock-color.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, libxcb,
+  xcbutilkeysyms , xcbutilimage, pam, libX11, libev, cairo, libxkbcommon,
+  libxkbfile, libjpeg_turbo, xcbutilxrm
+}:
+
+stdenv.mkDerivation rec {
+  version = "2.13.c.4";
+  pname = "i3lock-color";
+
+  src = fetchFromGitHub {
+    owner = "PandorasFox";
+    repo = "i3lock-color";
+    rev = version;
+    sha256 = "sha256-bbjkvgSKD57sdOtPYGLAKpQoIsJnF6s6ySq4dTWC3tI=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libxcb xcbutilkeysyms xcbutilimage pam libX11
+    libev cairo libxkbcommon libxkbfile libjpeg_turbo xcbutilxrm ];
+
+  makeFlags = [ "all" ];
+  preInstall = ''
+    mkdir -p $out/share/man/man1
+  '';
+  installFlags = [ "PREFIX=\${out}" "SYSCONFDIR=\${out}/etc" "MANDIR=\${out}/share/man" ];
+  postInstall = ''
+    mv $out/bin/i3lock $out/bin/i3lock-color
+    mv $out/share/man/man1/i3lock.1 $out/share/man/man1/i3lock-color.1
+    sed -i 's/\(^\|\s\|"\)i3lock\(\s\|$\)/\1i3lock-color\2/g' $out/share/man/man1/i3lock-color.1
+  '';
+  meta = with lib; {
+    description = "A simple screen locker like slock, enhanced version with extra configuration options";
+    longDescription = ''
+      Simple screen locker. After locking, a colored background (default: white) or
+      a configurable image is shown, and a ring-shaped unlock-indicator gives feedback
+      for every keystroke. After entering your password, the screen is unlocked again.
+
+      i3lock-color is forked from i3lock (https://i3wm.org/i3lock/) with the following
+      enhancements / additional configuration options:
+
+      - indicator:
+        - shape: ring or bar
+        - size: configurable
+        - all colors: configurable
+        - all texts: configurable
+        - visibility: can be always visible, can be restricted to some screens
+
+      - background: optionally show a blurred screen instead of a single color
+
+      - more information: show text at configurable positions:
+        - clock: time/date with configurable format
+        - keyboard-layout
+    '';
+    homepage = "https://github.com/PandorasFox/i3lock-color";
+    maintainers = with maintainers; [ malyn ];
+    license = licenses.bsd3;
+
+    platforms = platforms.all;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/lock-fancy-rapid.nix b/pkgs/applications/window-managers/i3/lock-fancy-rapid.nix
new file mode 100644
index 00000000000..8884b1d5100
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/lock-fancy-rapid.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, xorg, i3lock }:
+
+stdenv.mkDerivation rec {
+  pname = "i3lock-fancy-rapid";
+  version = "2019-10-09";
+  src = fetchFromGitHub {
+    owner = "yvbbrjdr";
+    repo = "i3lock-fancy-rapid";
+    rev = "c67f09bc8a48798c7c820d7d4749240b10865ce0";
+    sha256 = "0jhvlj6v6wx70239pgkjxd42z1s2bzfg886ra6n1rzsdclf4rkc6";
+  };
+
+  buildInputs = [ xorg.libX11 ];
+  propagatedBuildInputs = [ i3lock ];
+
+  postPatch = ''
+    substituteInPlace i3lock-fancy-rapid.c \
+      --replace '"i3lock"' '"${i3lock}/bin/i3lock"'
+  '';
+
+  installPhase = ''
+    install -D i3lock-fancy-rapid $out/bin/i3lock-fancy-rapid
+  '';
+
+  meta = with lib; {
+    description = "A faster implementation of i3lock-fancy";
+    homepage = "https://github.com/yvbbrjdr/i3lock-fancy-rapid";
+    maintainers = with maintainers; [ nickhu ];
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/lock-fancy.nix b/pkgs/applications/window-managers/i3/lock-fancy.nix
new file mode 100644
index 00000000000..9a1b959690a
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/lock-fancy.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, coreutils
+, scrot
+, imagemagick
+, gawk
+, i3lock-color
+, getopt
+, fontconfig
+}:
+
+stdenv.mkDerivation rec {
+  pname = "i3lock-fancy";
+  version = "unstable-2018-11-25";
+
+  src = fetchFromGitHub {
+    owner = "meskarune";
+    repo = "i3lock-fancy";
+    rev = "7accfb2aa2f918d1a3ab975b860df1693d20a81a";
+    sha256 = "00lqsvz1knb8iqy8lnkn3sf4c2c4nzb0smky63qf48m8za5aw9b1";
+  };
+
+  postPatch = ''
+    sed -i i3lock-fancy \
+      -e "s|mktemp|${coreutils}/bin/mktemp|" \
+      -e "s|'rm -f |'${coreutils}/bin/rm -f |" \
+      -e "s|scrot -z |${scrot}/bin/scrot -z |" \
+      -e "s|convert |${imagemagick.out}/bin/convert |" \
+      -e "s|awk -F|${gawk}/bin/awk -F|" \
+      -e "s| awk | ${gawk}/bin/awk |" \
+      -e "s|i3lock -i |${i3lock-color}/bin/i3lock-color -i |" \
+      -e 's|icon="/usr/share/i3lock-fancy/icons/lockdark.png"|icon="'$out'/share/i3lock-fancy/icons/lockdark.png"|' \
+      -e 's|icon="/usr/share/i3lock-fancy/icons/lock.png"|icon="'$out'/share/i3lock-fancy/icons/lock.png"|' \
+      -e "s|getopt |${getopt}/bin/getopt |" \
+      -e "s|fc-match |${fontconfig.bin}/bin/fc-match |" \
+      -e "s|shot=(import -window root)|shot=(${scrot}/bin/scrot -z -o)|"
+    rm Makefile
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/i3lock-fancy/icons
+    cp i3lock-fancy $out/bin/i3lock-fancy
+    cp icons/lock*.png $out/share/i3lock-fancy/icons
+  '';
+
+  meta = with lib; {
+    description = "i3lock is a bash script that takes a screenshot of the desktop, blurs the background and adds a lock icon and text";
+    homepage = "https://github.com/meskarune/i3lock-fancy";
+    maintainers = with maintainers; [ ];
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/lock.nix b/pkgs/applications/window-managers/i3/lock.nix
new file mode 100644
index 00000000000..03506e889d7
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/lock.nix
@@ -0,0 +1,37 @@
+{ fetchurl, lib, stdenv, which, pkg-config, libxcb, xcbutilkeysyms, xcbutilimage,
+  xcbutilxrm, pam, libX11, libev, cairo, libxkbcommon, libxkbfile }:
+
+stdenv.mkDerivation rec {
+  pname = "i3lock";
+  version = "2.13";
+
+  src = fetchurl {
+    url = "https://i3wm.org/i3lock/${pname}-${version}.tar.bz2";
+    sha256 = "02szjsaz7rqrdkd0r2nwgwa85c4hwfrcskxw7ryk695kmjcfhzv3";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ which libxcb xcbutilkeysyms xcbutilimage xcbutilxrm
+    pam libX11 libev cairo libxkbcommon libxkbfile ];
+
+  makeFlags = [ "all" ];
+  installFlags = [ "PREFIX=\${out}" "SYSCONFDIR=\${out}/etc" ];
+  postInstall = ''
+    mkdir -p $out/share/man/man1
+    cp *.1 $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    description = "A simple screen locker like slock";
+    longDescription = ''
+      Simple screen locker. After locking, a colored background (default: white) or
+      a configurable image is shown, and a ring-shaped unlock-indicator gives feedback
+      for every keystroke. After entering your password, the screen is unlocked again.
+    '';
+    homepage = "https://i3wm.org/i3lock/";
+    maintainers = with maintainers; [ malyn domenkozar ];
+    license = licenses.bsd3;
+    platforms = platforms.all;
+  };
+
+}
diff --git a/pkgs/applications/window-managers/i3/pystatus.nix b/pkgs/applications/window-managers/i3/pystatus.nix
new file mode 100644
index 00000000000..bddaab61578
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/pystatus.nix
@@ -0,0 +1,59 @@
+{ lib
+, fetchFromGitHub
+, libpulseaudio
+, libnotify
+, gobject-introspection
+, python3Packages
+, wrapGAppsHook
+, extraLibs ? [] }:
+
+python3Packages.buildPythonApplication rec {
+  # i3pystatus moved to rolling release:
+  # https://github.com/enkore/i3pystatus/issues/584
+  version = "unstable-2020-06-12";
+  pname = "i3pystatus";
+
+  src = fetchFromGitHub {
+    owner = "enkore";
+    repo = "i3pystatus";
+    rev = "dad5eb0c5c8a2ecd20c37ade4732586c6e53f44b";
+    sha256 = "18ygvkl92yr69kxsym57k1mc90asdxpz4b943i61qr0s4fc5n4mq";
+  };
+
+  buildInputs = [ libpulseaudio libnotify gobject-introspection ];
+
+  propagatedBuildInputs = with python3Packages; [
+    keyring colour netifaces psutil basiciw pygobject3
+  ] ++ extraLibs;
+
+  makeWrapperArgs = [
+    # LC_TIME != C results in locale.Error: unsupported locale setting
+    "--set" "LC_TIME" "C"
+    "--suffix" "LD_LIBRARY_PATH" ":" "${lib.makeLibraryPath [ libpulseaudio ]}"
+  ];
+
+  postPatch = ''
+    makeWrapperArgs+=(--set GI_TYPELIB_PATH "$GI_TYPELIB_PATH")
+  '';
+
+  postInstall = ''
+    makeWrapper ${python3Packages.python.interpreter} $out/bin/${pname}-python-interpreter \
+      --prefix PYTHONPATH : "$PYTHONPATH" \
+      ''${makeWrapperArgs[@]}
+  '';
+
+  # no tests in tarball
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/enkore/i3pystatus";
+    description = "A complete replacement for i3status";
+    longDescription = ''
+      i3pystatus is a growing collection of python scripts for status output compatible
+      to i3status / i3bar of the i3 window manager.
+    '';
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.igsha ];
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/status-rust.nix b/pkgs/applications/window-managers/i3/status-rust.nix
new file mode 100644
index 00000000000..ed518d8eb2e
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/status-rust.nix
@@ -0,0 +1,63 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, makeWrapper
+, dbus
+, libpulseaudio
+, notmuch
+, openssl
+, ethtool
+, lm_sensors
+, iw
+, iproute2
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "i3status-rust";
+  version = "0.21.8";
+
+  src = fetchFromGitHub {
+    owner = "greshake";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-l0XfitQSmSkivEg8+XcA/+bWdy/wzIpii/Npc4p8kUw=";
+  };
+
+  cargoSha256 = "sha256-2rJ9ZZHK1acJu6r6EjuoolLJZMdBsbKgN1DNvGM7deA=";
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+
+  buildInputs = [ dbus libpulseaudio notmuch openssl lm_sensors ];
+
+  buildFeatures = [
+    "notmuch"
+    "maildir"
+    "pulseaudio"
+  ];
+
+  prePatch = ''
+    substituteInPlace src/util.rs \
+      --replace "/usr/share/i3status-rust" "$out/share"
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share
+    cp -R examples files/* $out/share
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/i3status-rs --prefix PATH : ${lib.makeBinPath [ iproute2 ethtool iw ]}
+  '';
+
+  # Currently no tests are implemented, so we avoid building the package twice
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Very resource-friendly and feature-rich replacement for i3status";
+    homepage = "https://github.com/greshake/i3status-rust";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ backuitist globin ma27 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/status.nix b/pkgs/applications/window-managers/i3/status.nix
new file mode 100644
index 00000000000..40666b2d205
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/status.nix
@@ -0,0 +1,23 @@
+{ fetchurl, lib, stdenv, libconfuse, yajl, alsa-lib, libpulseaudio, libnl, meson, ninja, perl, pkg-config, asciidoc, xmlto, docbook_xml_dtd_45, docbook_xsl }:
+
+stdenv.mkDerivation rec {
+  pname = "i3status";
+  version = "2.14";
+
+  src = fetchurl {
+    url = "https://i3wm.org/i3status/i3status-${version}.tar.xz";
+    sha256 = "0929chhvyq9hg4scpcz8r9zn3s9jvbg6a86k3wqa77qg85rh4kaw";
+  };
+
+  nativeBuildInputs = [ meson ninja perl pkg-config asciidoc xmlto docbook_xml_dtd_45 docbook_xsl ];
+  buildInputs = [ libconfuse yajl alsa-lib libpulseaudio libnl ];
+
+  meta = {
+    description = "Generates a status line for i3bar, dzen2, xmobar or lemonbar";
+    homepage = "https://i3wm.org";
+    maintainers = [ ];
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.all;
+  };
+
+}
diff --git a/pkgs/applications/window-managers/i3/swallow.nix b/pkgs/applications/window-managers/i3/swallow.nix
new file mode 100644
index 00000000000..31101721e4c
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/swallow.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, poetry-core
+, i3ipc
+, xlib
+, six
+}:
+
+buildPythonApplication rec {
+  pname = "i3-swallow";
+  version = "unstable-2022-02-19";
+
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "jamesofarrell";
+    repo = "i3-swallow";
+    rev = "6fbc04645c483fe733de56b56743e453693d4c78";
+    sha256 = "1l3x8mixwq4n0lnyp0wz5vijgnypamq6lqjazcd2ywl2jv8d6fif";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = [
+    i3ipc
+    xlib
+    six
+  ];
+
+  # No tests available
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/jamesofarrell/i3-swallow";
+    description = "Swallow a terminal window in i3wm";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    mainProgram = "swallow";
+    maintainers = [ maintainers.ivar ];
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/wk-switch.nix b/pkgs/applications/window-managers/i3/wk-switch.nix
new file mode 100644
index 00000000000..d0055ef6365
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/wk-switch.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "i3-wk-switch";
+  version = "2020-03-18";
+
+  src = fetchFromGitHub {
+    owner = "tmfink";
+    repo = pname;
+    rev = "a618cb8f52120aa8d533bb7c0c8de3ff13b3dc06";
+    sha256 = "0ci0w5igjk5xa8x4rx17cpgmdkamwjmavxhp0vp6213cl93ybjhz";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ i3ipc ];
+
+  dontBuild = true;
+  doCheck = false;
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp i3-wk-switch.py "$out/bin/i3-wk-switch"
+  '';
+
+  meta = with lib; {
+    description = "XMonad-like workspace switching for i3 and sway";
+    maintainers = with maintainers; [ synthetica ];
+    platforms = platforms.linux;
+    license = licenses.mit;
+    homepage = "https://travisf.net/i3-wk-switcher";
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/wmfocus.nix b/pkgs/applications/window-managers/i3/wmfocus.nix
new file mode 100644
index 00000000000..ec2e03de0f8
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/wmfocus.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, rustPlatform
+, xorg, python3, pkg-config, cairo, libxkbcommon }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wmfocus";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "svenstaro";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-HrS+C/6KDG2Rn/3u/mMmp4vzQ5YAHUFL4HFecteuzsc=";
+  };
+
+  cargoSha256 = "sha256-EzgYnfUgwK2ldzrlqe9N9jeGgK+RzQPjbOjJCGEkcwE=";
+
+  nativeBuildInputs = [ python3 pkg-config ];
+  buildInputs = [ cairo libxkbcommon xorg.xcbutilkeysyms ];
+
+  # For now, this is the only available featureset. This is also why the file is
+  # in the i3 folder, even though it might be useful for more than just i3
+  # users.
+  buildFeatures = [ "i3" ];
+
+  meta = with lib; {
+    description = "Visually focus windows by label";
+    homepage = "https://github.com/svenstaro/wmfocus";
+    license = licenses.mit;
+    maintainers = with maintainers; [ synthetica ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/workstyle.nix b/pkgs/applications/window-managers/i3/workstyle.nix
new file mode 100644
index 00000000000..3f7c252c2c3
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/workstyle.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "workstyle";
+  version = "unstable-2021-05-09";
+
+  src = fetchFromGitHub {
+    owner = "pierrechevalier83";
+    repo = pname;
+    rev = "f2023750d802259ab3ee7d7d1762631ec157a0b1";
+    sha256 = "04xds691sw4pi2nq8xvdhn0312wwia60gkd8b1bjqy11zrqbivbx";
+  };
+
+  cargoSha256 = "0xwv8spr96z4aimjlr15bhwl6i3zqp7jr45d9zr3sbi9d8dbdja2";
+
+  doCheck = false; # No tests
+
+  meta = with lib; {
+    description = "Sway workspaces with style";
+    homepage = "https://github.com/pierrechevalier83/workstyle";
+    license = licenses.mit;
+    maintainers = with maintainers; [ FlorianFranzen ];
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/wsr.nix b/pkgs/applications/window-managers/i3/wsr.nix
new file mode 100644
index 00000000000..6e92fba07d1
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/wsr.nix
@@ -0,0 +1,33 @@
+{ lib, fetchFromGitHub, rustPlatform, libxcb, python3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "i3wsr";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "roosta";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-mwPU700eqyFYihWP1m3y56zXnX16sjSNzB6XNlCttBU=";
+  };
+
+  cargoSha256 = "sha256-f0Yby/2g7apkqx0iCcd/QkQgMVYZDUQ1vWw8RCXQ9Z4=";
+
+  nativeBuildInputs = [ python3 ];
+  buildInputs = [ libxcb ];
+
+  # has not tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Automatically change i3 workspace names based on their contents";
+    longDescription = ''
+      Automatically sets the workspace names to match the windows on the workspace.
+      The chosen name for a workspace is a user-defined composite of the WM_CLASS X11
+      window property for each window in a workspace.
+    '';
+    homepage = "https://github.com/roosta/i3wsr";
+    license = licenses.mit;
+    maintainers = [ maintainers.sebbadk ];
+  };
+}