about summary refs log tree commit diff
path: root/modules/i3
diff options
context:
space:
mode:
authoraszlig <aszlig@redmoonstudios.org>2014-05-02 01:21:35 +0200
committeraszlig <aszlig@redmoonstudios.org>2014-05-02 01:21:35 +0200
commit7a99937b12abbceadbdb227f9f661efb09fbe5b2 (patch)
tree02ed069dd84e4f6d9ea96207ce21544d6a730015 /modules/i3
parent279a97b5f972b2229b3d76a3a859b11b016c4aca (diff)
Move i3 configuration into its own module.
We want to keep common.nix nice and clean and in the long term the whole
config should be more modular.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Diffstat (limited to 'modules/i3')
-rw-r--r--modules/i3/default.nix56
-rw-r--r--modules/i3/i3.conf189
2 files changed, 245 insertions, 0 deletions
diff --git a/modules/i3/default.nix b/modules/i3/default.nix
new file mode 100644
index 00000000..99849bf4
--- /dev/null
+++ b/modules/i3/default.nix
@@ -0,0 +1,56 @@
+{ pkgs, config, ... }:
+
+{
+  services.xserver.windowManager = {
+    default = "i3";
+
+    i3.enable = true;
+    i3.configFile = with pkgs.lib; pkgs.substituteAll ({
+      name = "i3.conf";
+      src = ./i3.conf;
+
+      inherit (pkgs) conky dmenu xterm pvolctrl;
+      inherit (pkgs.xorg) xsetroot;
+      leftHead = head config.services.xserver.xrandrHeads;
+      rightHead = last config.services.xserver.xrandrHeads;
+
+      primaryNetInterface = "enp0s25";
+
+      conkyrc = pkgs.writeText "conkyrc" ''
+        cpu_avg_samples 2
+        net_avg_samples 2
+        no_buffers yes
+        out_to_console yes
+        out_to_ncurses no
+        out_to_stderr no
+        extra_newline no
+        update_interval 1.0
+        uppercase no
+        use_spacer none
+        pad_percents 3
+        use_spacer left
+        TEXT
+      '';
+    } // (let
+      # Workaround for Synergy: we need to have polarizing heads.
+      leftHead = head config.services.xserver.xrandrHeads;
+      rightHead = last config.services.xserver.xrandrHeads;
+    in if config.networking.hostName == "mmrnmhrm"
+       then { inherit leftHead rightHead; }
+       else { leftHead = rightHead; rightHead = leftHead; }
+    ) // (let
+      wsConfig = if config.networking.hostName == "mmrnmhrm"
+                 then [ "XMPP" null "chromium" null null
+                        null   null null       null null ]
+                 else [ "chromium" null null null null
+                        null       null null null null ];
+
+      mkWsName = num: name: let
+        mkPair = nameValuePair "ws${toString num}";
+      in if name == null
+         then mkPair (toString num)
+         else mkPair "${toString num}: ${name}";
+
+    in listToAttrs (imap mkWsName wsConfig)));
+  };
+}
diff --git a/modules/i3/i3.conf b/modules/i3/i3.conf
new file mode 100644
index 00000000..6ae4a3a7
--- /dev/null
+++ b/modules/i3/i3.conf
@@ -0,0 +1,189 @@
+# default modifier key
+set $mod Mod4
+
+# we want to have a VT-style font :-)
+font -dosemu-vga-medium-r-normal--17-160-75-75-c-80-ibm-cp866
+
+# Use Mouse+$mod to drag floating windows to their wanted position
+floating_modifier $mod
+
+# reasonable defaults!
+default_orientation horizontal
+workspace_layout tabbed
+popup_during_fullscreen ignore
+
+# start a terminal
+bindsym $mod+Shift+Return exec --no-startup-id @xterm@/bin/xterm
+
+# kill focused window
+bindsym $mod+Shift+C kill
+
+# start dmenu (a program launcher)
+bindsym $mod+p exec --no-startup-id @dmenu@/bin/dmenu_run
+
+# set background
+exec @xsetroot@/bin/xsetroot -solid black
+
+# audio controls
+bindsym XF86AudioLowerVolume exec @pvolctrl@/bin/pvolctrl -10
+bindsym XF86AudioRaiseVolume exec @pvolctrl@/bin/pvolctrl 10
+bindsym XF86AudioMute exec @pvolctrl@/bin/pvolctrl 0
+
+# change/move focus
+bindsym $mod+Shift+Left move left
+bindsym $mod+Shift+H move left
+bindsym $mod+Shift+Down move down
+bindsym $mod+Shift+T move down
+bindsym $mod+Shift+Up move up
+bindsym $mod+Shift+N move up
+bindsym $mod+Shift+Right move right
+bindsym $mod+Shift+S move right
+
+bindsym $mod+Left focus left
+bindsym $mod+h focus left
+bindsym $mod+Down focus down
+bindsym $mod+t focus down
+bindsym $mod+Up focus up
+bindsym $mod+n focus up
+bindsym $mod+Right focus right
+bindsym $mod+s focus right
+
+# split in horizontal orientation
+bindsym $mod+i split h
+
+# split in vertical orientation
+bindsym $mod+d split v
+
+# enter fullscreen mode for the focused container
+bindsym $mod+f fullscreen
+
+# change container layout (stacked, tabbed, default)
+bindsym $mod+apostrophe layout stacking
+bindsym $mod+comma layout tabbed
+bindsym $mod+period layout default
+
+# toggle tiling / floating
+bindsym $mod+Shift+space floating toggle
+
+# change focus between tiling / floating windows
+bindsym $mod+space focus mode_toggle
+
+# focus the parent container
+bindsym $mod+a focus parent
+
+# focus the child container
+bindsym $mod+semicolon focus child
+
+# switch to workspace
+bindsym $mod+1 workspace "@ws1@"
+bindsym $mod+2 workspace "@ws2@"
+bindsym $mod+3 workspace "@ws3@"
+bindsym $mod+4 workspace "@ws4@"
+bindsym $mod+5 workspace "@ws5@"
+bindsym $mod+6 workspace "@ws6@"
+bindsym $mod+7 workspace "@ws7@"
+bindsym $mod+8 workspace "@ws8@"
+bindsym $mod+9 workspace "@ws9@"
+bindsym $mod+0 workspace "@ws10@"
+
+# move focused container to workspace
+bindsym $mod+Shift+exclam move workspace "@ws1@"
+bindsym $mod+Shift+at move workspace "@ws2@"
+bindsym $mod+Shift+numbersign move workspace "@ws3@"
+bindsym $mod+Shift+dollar move workspace "@ws4@"
+bindsym $mod+Shift+percent move workspace "@ws5@"
+bindsym $mod+Shift+asciicircum move workspace "@ws6@"
+bindsym $mod+Shift+ampersand move workspace "@ws7@"
+bindsym $mod+Shift+asterisk move workspace "@ws8@"
+bindsym $mod+Shift+parenleft move workspace "@ws9@"
+bindsym $mod+Shift+parenright move workspace "@ws10@"
+
+# reload the configuration file
+bindsym $mod+Shift+L reload
+# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
+bindsym $mod+Shift+R restart
+# exit i3 (logs you out of your X session)
+bindsym $mod+Shift+Q exit
+
+# resize window (you can also use the mouse for that)
+mode "resize" {
+    # These bindings trigger as soon as you enter the resize mode
+
+    # They resize the border in the direction you pressed, e.g.
+    # when pressing left, the window is resized so that it has
+    # more space on its left
+
+    bindsym Left resize shrink left 10 px or 10 ppt
+    bindsym h resize shrink left 10 px or 10 ppt
+    bindsym Down resize shrink down 10 px or 10 ppt
+    bindsym t resize shrink down 10 px or 10 ppt
+    bindsym Up resize shrink up 10 px or 10 ppt
+    bindsym n resize shrink up 10 px or 10 ppt
+    bindsym Right resize shrink right 10 px or 10 ppt
+    bindsym s resize shrink right 10 px or 10 ppt
+
+    bindsym Shift+Left resize grow left 10 px or 10 ppt
+    bindsym Shift+H resize grow left 10 px or 10 ppt
+    bindsym Shift+Down resize grow down 10 px or 10 ppt
+    bindsym Shift+T resize grow down 10 px or 10 ppt
+    bindsym Shift+Up resize grow up 10 px or 10 ppt
+    bindsym Shift+N resize grow up 10 px or 10 ppt
+    bindsym Shift+Right resize grow right 10 px or 10 ppt
+    bindsym Shift+S resize grow right 10 px or 10 ppt
+
+    # back to normal: Enter or Escape
+    bindsym Return mode "default"
+    bindsym Escape mode "default"
+}
+
+bindsym $mod+r mode "resize"
+
+# workspace assignments
+workspace "@ws1@" output @leftHead@
+workspace "@ws2@" output @leftHead@
+workspace "@ws3@" output @leftHead@
+workspace "@ws4@" output @leftHead@
+workspace "@ws5@" output @leftHead@
+workspace "@ws6@" output @rightHead@
+workspace "@ws7@" output @rightHead@
+workspace "@ws8@" output @rightHead@
+workspace "@ws9@" output @rightHead@
+workspace "@ws10@" output @rightHead@
+
+# default applications
+assign [class="^Tkabber$"] 1: tkabber
+#exec --no-startup-id tkabber
+assign [class="^Chromium(?:-browser)?$"] 3: chromium
+#exec chromium
+
+# ratmenu should be as unintrusive as possible
+for_window [class="^ratmenu$"] floating enable
+for_window [class="^ratmenu$"] border none
+
+# various app cruft
+for_window [class="^Dia$"] floating enable
+
+# bar configuration
+bar {
+    output @leftHead@
+    status_command @conky@/bin/conky -c "@conkyrc@" -t 'CPU: ${cpu cpu1}% ${cpu cpu2}% ${cpu cpu3}% ${cpu cpu4}% ${cpu cpu5}% ${cpu cpu6}% ${cpu cpu7}% ${cpu cpu8}% - ${cpu cpu0}% | MEM: $mem/$memmax - $memperc% | SWAP: $swap/$swapmax $swapperc% | ${time %a %b %d %T %Z %Y}'
+
+    colors {
+        focused_workspace #5c5cff #e5e5e5
+        active_workspace #ffffff #0000ee
+        inactive_workspace #00cdcd #0000ee
+        urgent_workspace #ffff00 #cd0000
+    }
+}
+
+bar {
+    output @rightHead@
+    status_command @conky@/bin/conky -c "@conkyrc@" -t 'NET: ${upspeed @primaryNetInterface@} ${downspeed @primaryNetInterface@} | DF: ${fs_used /}/${fs_size /} | LAVG: $loadavg | TEMP - CPU: ${platform coretemp.0 temp 2}C ${platform coretemp.0 temp 3}C ${platform coretemp.0 temp 4}C ${platform coretemp.0 temp 5}C - GPU: ${hwmon 0 temp 1}C - OUTSIDE: ${weather http://weather.noaa.gov/pub/data/observations/metar/stations/ EDMA temperature}C | ${time %a %b %d %T %Z %Y}'
+
+    colors {
+        focused_workspace #5c5cff #e5e5e5
+        active_workspace #ffffff #0000ee
+        inactive_workspace #00cdcd #0000ee
+        urgent_workspace #ffff00 #cd0000
+    }
+}