I3: Difference between revisions

m link to home-manager-options.extranix.com which is foss
Pigs (talk | contribs)
Reformat layout, clean up wording, add links
Tags: Mobile edit Mobile web edit Advanced mobile edit
Line 1: Line 1:
{{Lowercase_title}}
{{Lowercase_title}}
{{Expansion|there are a lot more [https://search.nixos.org/options/?query=i3 options]}}
{{Expansion|there are a lot more [https://search.nixos.org/options/?query=i3 options]}}
[https://i3wm.org/ i3] is a tiling window manager for X.
[https://i3wm.org/ i3] is a tiling window manager for [[Xorg|X Window System]].


== Enabling ==
== Enabling ==


To use i3 set <code>services.xserver.windowManager.i3.enable</code> to <code>true</code>. For example:
To use i3 set {{nixos:option|services.xserver.windowManager.i3.enable}} to <code>true</code>. For example:
{{file|/etc/nixos/configuration.nix|nix|
{{file|/etc/nixos/configuration.nix|nix|
<nowiki>
<nowiki>
Line 11: Line 11:


{
{
  ...
  environment.pathsToLink = [ "/libexec" ]; # links /libexec from derivations to /run/current-system/sw
   ...
   ...
   services.xserver = {
   services.xserver = {
     enable = true;
     enable = true;
    desktopManager = {
      xterm.enable = false;
    };
 
    displayManager = {
        defaultSession = "none+i3";
    };


     windowManager.i3 = {
     windowManager.i3 = {
Line 31: Line 21:
         i3status # gives you the default i3 status bar
         i3status # gives you the default i3 status bar
         i3lock #default i3 screen locker
         i3lock #default i3 screen locker
        i3blocks #if you are planning on using i3blocks over i3status
     ];
     ];
     };
     };
Line 39: Line 28:
</nowiki>
</nowiki>
}}
}}
By default, the path to the i3 configuration file is <code>$HOME/.i3/config</code>. For a full list of i3 options, refer to the {{nixos:option|services.xserver.windowManager.i3}} module options.
{{Evaluate}}
{{Evaluate}}


Line 75: Line 67:
[[Xfce#Using_as_a_desktop_manager_and_not_a_window_manager]].
[[Xfce#Using_as_a_desktop_manager_and_not_a_window_manager]].


===I3-gaps fork===
== Tips & tricks ==
 
=== I3-gaps fork ===


To use i3-gaps fork, the following line should be added to the configuration.nix:   
To use i3-gaps fork, the following line should be added to the configuration.nix:   
Line 81: Line 75:
<syntaxhighlight lang="nix" inline>services.xserver.windowManager.i3.package = pkgs.i3-gaps;</syntaxhighlight>
<syntaxhighlight lang="nix" inline>services.xserver.windowManager.i3.package = pkgs.i3-gaps;</syntaxhighlight>


== Tips & tricks ==
=== i3blocks ===
===i3blocks===
 
After installing and enabling i3blocks, you may notice that i3block won't work. why?
After installing and enabling i3blocks, you may find that i3block does not work. This issue occurs because i3blocks reads its contents from a hardcoded path in <code>/etc</code> by default.


It seems that i3blocks read it's contents from a hardcoded path in /etc by default.
Since in nixos however, these contents are located within the Nix store at a path similar to:
Since in nixos, this path look something like:


{{file|Path of i3blocks in nixos|nix|
{{file|Path of i3blocks in nixos|nix|
Line 94: Line 87:
}}
}}


And it can't find this path, so we have to create a link to this path by adding this line to configuration.nix file:
Since i3blocks cannot locate this path, you have to create a link to this path by adding this line to configuration.nix file:
{{file|/etc/nixos/configuration.nix|nix|
{{file|/etc/nixos/configuration.nix|nix|
<nowiki>
<nowiki>
Line 101: Line 94:
}}
}}


Finally, your block may looks like:
After rebuilding the system, you may configure your block like the following:
{{file|~/.config/i3/i3blocks.conf|nix|
{{file|~/.config/i3/i3blocks.conf|nix|
<nowiki>
<nowiki>
Line 112: Line 105:
}}
}}


===DConf===
=== DConf ===
 
If your settings aren't being saved for some applications (gtk3 applications, firefox), like the size of file selection windows, or the size of the save dialog, you will need to enable dconf:
If your settings aren't being saved for some applications (gtk3 applications, firefox), like the size of file selection windows, or the size of the save dialog, you will need to enable dconf:


Line 121: Line 115:
}}
}}


===Lxappearance===
=== Lxappearance ===
 
To change the icon and themes you can install lxappearance:
To change the icon and themes you can install lxappearance:


Line 135: Line 130:


=== Solve inconsistency between gtk2 and gtk3 themes ===
=== Solve inconsistency between gtk2 and gtk3 themes ===
If enabling '''dconf''' or installing '''Lxappearance''' but still see inconsistency between themes, you have to manually edit their configurations. In fact, It is possible to install some gtk3 themes but when you start another gtk2 application, your theme not effected properly. It's because there is no .gtkrc-2.0 in your home directory. First create it and paste these lines to it:
If enabling '''dconf''' or installing '''Lxappearance''' but still see inconsistency between themes, you have to manually edit their configurations. In fact, It is possible to install some gtk3 themes but when you start another gtk2 application, your theme not effected properly. It's because there is no .gtkrc-2.0 in your home directory. First create it and paste these lines to it:


Line 161: Line 157:


=== Wallpaper ===
=== Wallpaper ===
If <code>~/.background-image</code> exists then it will be displayed as a wallpaper. Options <code>services.xserver.desktopManager.wallpaper.combineScreens</code> and <code>.mode</code> control exactly how it is displayed.
If <code>~/.background-image</code> exists then it will be displayed as a wallpaper. Options <code>services.xserver.desktopManager.wallpaper.combineScreens</code> and <code>.mode</code> control exactly how it is displayed.


[[Category:Window managers]]
=== i3status with home-manager ===
[[Category:Applications]]
 
Same as in i3status-rust. Notice: home-manager will not override your existing config, i.e. if the file/folder  <code>~/.config/i3status/config</code>  is present on your system, there won't be any changes after rebuilding.
 
External resources that can help you with your setup: [https://home-manager-options.extranix.com/?query=xsession.windowManager.i3.config https://home-manager-options.extranix.com/?query=xsession.windowManager.i3.config]
 
==== To enable i3status in home-manager and change some basic options: ====
 
{{file|home.nix|nix|
<nowiki>
programs.i3status = {
 
  enable = true;
 
  general = {
    colors = true;
    color_good = "#98971a";
    color_bad  = "#9d0006";
    interval = 1;
  };
};
</nowiki>
}}
 
==== Adding various modules: ====
 
{{file|home.nix|nix|
<nowiki>
programs.i3status = {
  ...
  modules = {
 
    "disk /" = {
      enable = true;
      position = 1;
      settings = {
        format = "FREE: %free";
      };
    }; 
 
    # Current wireless connection (ethernet is pretty much the same)
    "wireless <replace-with-interface-name>" = {
      enable = true;
      position = 2;
      settings = {
        format_up = "W: (%quality at %essid) %ip";
        format_down = "W: down";
      };
    };
 
    # Battery status
    "battery 0" = {
      enable = true;
      position = 4;
      settings = {
        format = "BAT: %status %percentage %remaining %emptytime";
        format_down = "No battery";
        status_chr = "CHR";
        status_bat = "";
        status_unk = "?";
        status_full = "FULL";
        path = "/sys/class/power_supply/BAT1/uevent";
        low_threshold = 10;
      };
    };
  };
};
</nowiki>
}}
 
===== Disabling default i3status modules =====
 
After setting up i3status, you may notice it shows two eth- and wifi's. To disable <code>ethernet _first_</code> and <code>wireless _first_</code>, add the following:
 
{{file|home.nix|nix|
<nowiki>
programs.i3status.modules = {
  "wireless _first_" = {
    enable = false;
  };
 
  "ethernet _first_" = {
    enable = false;
  };
};
</nowiki>
}}


=== i3status-rust with home-manager ===
=== i3status-rust with home-manager ===
Line 170: Line 252:
i3status-rust can be configured through home-manager, but that configuration does not autoamatically update i3 to invoke i3status-rust. Instead <code>xsession.windowManager.i3.config.bars</code> needs to be updated to reference i3status-rust and the config files that the home-manager config produces. Consider the following setup:
i3status-rust can be configured through home-manager, but that configuration does not autoamatically update i3 to invoke i3status-rust. Instead <code>xsession.windowManager.i3.config.bars</code> needs to be updated to reference i3status-rust and the config files that the home-manager config produces. Consider the following setup:


{{file|~/.config/nixpkg/home.nix|nix|
{{file|home.nix|nix|
<nowiki>
<nowiki>
   xsession.windowManager.i3 = {
   xsession.windowManager.i3 = {
Line 201: Line 283:
</nowiki>
</nowiki>
}}
}}
=== i3status with home-manager ===


Same as in i3status-rust. Notice: home-manager will not override your existing config, i.e. if the file/folder  <code>~/.config/i3status/config</code>  is present on your system, there won't be any changes after rebuilding.
[[Category:Window managers]]
 
[[Category:Applications]]
External resources that can help you with your setup: https://home-manager-options.extranix.com/?query=xsession.windowManager.i3.config
[[Category:Desktop]]
 
===== To enable i3status in home-manager and change some basic options: =====
<syntaxhighlight lang="nix" line="1" start="1">
programs.i3status = {
 
  enable = true;
 
  general = {
    colors = true;
    color_good = "#98971a";
    color_bad  = "#9d0006";
    interval = 1;
  };
};
</syntaxhighlight>
 
===== Adding various modules: =====
<syntaxhighlight lang="nix" line="1" start="1">
modules = {
 
  "disk /" = {
    enable = true;
    position = 1;
    settings = {
      format = "FREE: %free";
    };
  /* Put some of the modules below after this comment */
 
  };
</syntaxhighlight>
 
===== Current wireless connection (ethernet is pretty much the same) =====
<syntaxhighlight lang="nix" line="1" start="1">
"wireless <replace-with-interface-name>" = {
  enable = true;
  position = 2;
  settings = {
    format_up = "W: (%quality at %essid) %ip";
    format_down = "W: down";
  };
};
</syntaxhighlight>
 
===== Battery status =====
<syntaxhighlight lang="nix" line="1" start="1">
"battery 0" = {
  enable = true;
  position = 4;
  settings = {
    format = "BAT: %status %percentage %remaining %emptytime";
    format_down = "No battery";
    status_chr = "CHR";
    status_bat = "";
    status_unk = "?";
    status_full = "FULL";
    path = "/sys/class/power_supply/BAT1/uevent";
    low_threshold = 10;
  };
};
 
</syntaxhighlight>
 
=== Disabling default i3status modules: ===
After setting up my config, i3status showed two eth- and wifi's. To disable <code>ethernet _first_</code>  and <code>wireless _first_</code>  just add:<syntaxhighlight lang="nix" line="1" start="1">
"wireless _first_" = {
  enable = false;
};
 
"ethernet _first_" = {
  enable = false;
};
</syntaxhighlight>