diff options
Diffstat (limited to 'pkgs/applications/window-managers/i3')
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 ]; + }; +} |