aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2013-09-14 23:55:55 +1200
committerTom Ryder <tom@sanctum.geek.nz>2013-09-14 23:55:55 +1200
commita42d6789e8c689df0e80849d7183525a04e2dcfe (patch)
tree1a53f322675071999627391c10909938dba8cc25
parentAdd trailing newline to .xessionrc (diff)
downloaddotfiles-a42d6789e8c689df0e80849d7183525a04e2dcfe.tar.gz
dotfiles-a42d6789e8c689df0e80849d7183525a04e2dcfe.zip
Switched window managers from awesome to i3
No hard feelings, awesome
-rw-r--r--README.markdown20
-rw-r--r--X/xsession2
-rw-r--r--X/xsessionrc1
-rw-r--r--awesome/rc.lua358
-rw-r--r--i3/config108
-rw-r--r--i3/status12
-rwxr-xr-xinstall2
7 files changed, 133 insertions, 370 deletions
diff --git a/README.markdown b/README.markdown
index 4ace08c7..b3b4ca41 100644
--- a/README.markdown
+++ b/README.markdown
@@ -32,13 +32,13 @@ Configuration is included for:
* [ack][2] — Perl alternative to `grep(1)`, including a copy of its
standalone version
-* [awesome][3] — Tiling window manager
-* [Bash][4] — GNU Bourne-Again Shell, including a `~/.profile` configured to
+* [Bash][3] — GNU Bourne-Again Shell, including a `~/.profile` configured to
work with most Bourne-compatible shells
-* [cURL][5] — Command-line tool for transferring data with URL syntax
-* [Git][6] — Distributed version control system
-* [GnuPG][7] — GNU Privacy Guard, for private communication and file
+* [cURL][4] — Command-line tool for transferring data with URL syntax
+* [Git][5] — Distributed version control system
+* [GnuPG][6] — GNU Privacy Guard, for private communication and file
encryption
+* [i3wm][7] — Tiling window manager
* [Mutt][8] — Terminal mail user agent
* [Newsbeuter][9] — Terminal RSS/Atom feed reader
* [Perl::Critic][10] — Static analysis tool for Perl code
@@ -159,11 +159,11 @@ next time you’re in New Zealand.
[1]: http://git-scm.com/book/en/Git-Tools-Submodules
[2]: http://beyondgrep.com/
-[3]: http://awesome.naquadah.org/
-[4]: https://www.gnu.org/software/bash/
-[5]: http://curl.haxx.se/
-[6]: http://git-scm.com/
-[7]: http://www.gnupg.org/
+[3]: https://www.gnu.org/software/bash/
+[4]: http://curl.haxx.se/
+[5]: http://git-scm.com/
+[6]: http://www.gnupg.org/
+[7]: http://i3wm.org/
[8]: http://www.mutt.org/
[9]: http://www.newsbeuter.org/
[10]: http://search.cpan.org/~thaljef/Perl-Critic-1.118/lib/Perl/Critic.pm
diff --git a/X/xsession b/X/xsession
index 2bf35090..37179a59 100644
--- a/X/xsession
+++ b/X/xsession
@@ -1,3 +1,3 @@
#!/usr/bin/env bash
-exec awesome
+exec i3
diff --git a/X/xsessionrc b/X/xsessionrc
index 9a783fa6..00f120e3 100644
--- a/X/xsessionrc
+++ b/X/xsessionrc
@@ -1,3 +1,4 @@
+feh --bg-scale "$HOME"/.i3/draugen.jpg
xmodmap ~/.Xmodmap
xscreensaver &
diff --git a/awesome/rc.lua b/awesome/rc.lua
deleted file mode 100644
index f7fdc58c..00000000
--- a/awesome/rc.lua
+++ /dev/null
@@ -1,358 +0,0 @@
-require("awful")
-require("awful.autofocus")
-require("awful.rules")
-require("beautiful")
-require("naughty")
-require("debian.menu")
-
--- Error handling in startup
-if awesome.startup_errors then
- naughty.notify({ preset = naughty.config.presets.critical,
- title = "Oops, there were errors during startup!",
- text = awesome.startup_errors })
-end
-
--- Error handling in runtime
-do
- local in_error = false
- awesome.add_signal("debug::error", function (err)
- -- Make sure we don't go into an endless error loop
- if in_error then return end
- in_error = true
- naughty.notify({ preset = naughty.config.presets.critical,
- title = "Oops, an error happened!",
- text = err })
- in_error = false
- end)
-end
-
--- Theme
-beautiful.init("/home/tom/.config/awesome/tyr/theme.lua")
-
--- Standard terminal
-terminal = "urxvtcd"
-editor = os.getenv("EDITOR") or "editor"
-editor_cmd = terminal .. " -e " .. editor
-
--- Modkey
-modkey = "Mod4"
-
--- Layouts
-layouts =
-{
- awful.layout.suit.tile,
- awful.layout.suit.tile.left,
- awful.layout.suit.tile.bottom,
- awful.layout.suit.tile.top,
- awful.layout.suit.floating,
- awful.layout.suit.fair,
- awful.layout.suit.fair.horizontal,
- awful.layout.suit.spiral,
- awful.layout.suit.spiral.dwindle,
- awful.layout.suit.max,
- awful.layout.suit.max.fullscreen,
- awful.layout.suit.magnifier
-}
-
--- Tags
-tags = {
- awful.tag(
- {"1:web", "2:tor", "3:game", "4:video", "5:graphics", "6:audio"}, 1,
- {layouts[1], layouts[1], layouts[1], layouts[1], layouts[1], layouts[1]}
- ),
- awful.tag(
- {"1:tmux", "2:term", "3:music", "4:torrent", "5:cast", "6:misc"}, 2,
- {layouts[1], layouts[1], layouts[1], layouts[1], layouts[10], layouts[1]}
- )
-}
-
--- Menu
-myawesomemenu = {
- { "manual", terminal .. " -e man awesome" },
- { "edit config", editor_cmd .. " " .. awesome.conffile },
- { "restart", awesome.restart },
- { "quit", awesome.quit }
-}
-mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
- { "Debian", debian.menu.Debian_menu.Debian },
- { "open terminal", terminal }
- }
- })
-mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon),
- menu = mymainmenu })
-
--- Clock
-mytextclock = awful.widget.textclock({ align = "right" })
-
--- System tray
-mysystray = widget({ type = "systray" })
-
--- Per-screen wiboxes
-mywibox = {}
-mypromptbox = {}
-mylayoutbox = {}
-mytaglist = {}
-mytaglist.buttons = awful.util.table.join(
- awful.button({ }, 1, awful.tag.viewonly),
- awful.button({ modkey }, 1, awful.client.movetotag),
- awful.button({ }, 3, awful.tag.viewtoggle),
- awful.button({ modkey }, 3, awful.client.toggletag),
- awful.button({ }, 4, awful.tag.viewnext),
- awful.button({ }, 5, awful.tag.viewprev)
- )
-mytasklist = {}
-mytasklist.buttons = awful.util.table.join(
- awful.button({ }, 1, function (c)
- if c == client.focus then
- c.minimized = true
- else
- if not c:isvisible() then
- awful.tag.viewonly(c:tags()[1])
- end
- -- This will also un-minimize
- -- the client, if needed
- client.focus = c
- c:raise()
- end
- end),
- awful.button({ }, 3, function ()
- if instance then
- instance:hide()
- instance = nil
- else
- instance = awful.menu.clients({ width=250 })
- end
- end),
- awful.button({ }, 4, function ()
- awful.client.focus.byidx(1)
- if client.focus then client.focus:raise() end
- end),
- awful.button({ }, 5, function ()
- awful.client.focus.byidx(-1)
- if client.focus then client.focus:raise() end
- end))
-
-for s = 1, screen.count() do
- -- Create a promptbox for each screen
- mypromptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright })
- -- Create an imagebox widget which will contains an icon indicating which layout we're using.
- -- We need one layoutbox per screen.
- mylayoutbox[s] = awful.widget.layoutbox(s)
- mylayoutbox[s]:buttons(awful.util.table.join(
- awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end),
- awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end),
- awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end),
- awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end)))
- -- Create a taglist widget
- mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons)
-
- -- Create a tasklist widget
- mytasklist[s] = awful.widget.tasklist(function(c)
- return awful.widget.tasklist.label.currenttags(c, s)
- end, mytasklist.buttons)
-
- -- Create the wibox
- mywibox[s] = awful.wibox({ position = "top", screen = s })
- -- Add widgets to the wibox - order matters
- mywibox[s].widgets = {
- {
- mylauncher,
- mytaglist[s],
- mypromptbox[s],
- layout = awful.widget.layout.horizontal.leftright
- },
- mylayoutbox[s],
- mytextclock,
- s == 1 and mysystray or nil,
- mytasklist[s],
- layout = awful.widget.layout.horizontal.rightleft
- }
-end
-
--- Mouse bindings
-root.buttons(awful.util.table.join(
- awful.button({ }, 3, function () mymainmenu:toggle() end),
- awful.button({ }, 4, awful.tag.viewnext),
- awful.button({ }, 5, awful.tag.viewprev)
-))
-
--- Standard awesome global controls
-globalkeys = awful.util.table.join(
- awful.key({ modkey, }, "Left", awful.tag.viewprev ),
- awful.key({ modkey, }, "Right", awful.tag.viewnext ),
- awful.key({ modkey, }, "Escape", awful.tag.history.restore),
-
- -- Lock screen with mod4+backslash
- awful.key({ modkey, }, "\\",
- function ()
- awful.util.spawn("xscreensaver-command -lock")
- end),
-
- awful.key({ modkey, }, "j",
- function ()
- awful.client.focus.byidx( 1)
- if client.focus then client.focus:raise() end
- end),
- awful.key({ modkey, }, "k",
- function ()
- awful.client.focus.byidx(-1)
- if client.focus then client.focus:raise() end
- end),
- awful.key({ modkey, }, "w", function () mymainmenu:show({keygrabber=true}) end),
-
- -- Layout manipulation
- awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end),
- awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end),
- awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end),
- awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end),
- awful.key({ modkey, }, "u", awful.client.urgent.jumpto),
- awful.key({ modkey, }, "Tab",
- function ()
- awful.client.focus.history.previous()
- if client.focus then
- client.focus:raise()
- end
- end),
-
- -- Standard program
- awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end),
- awful.key({ modkey, "Control" }, "r", awesome.restart),
- awful.key({ modkey, "Shift" }, "q", awesome.quit),
-
- awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end),
- awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end),
- awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end),
- awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end),
- awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end),
- awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end),
- awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end),
- awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end),
-
- awful.key({ modkey, "Control" }, "n", awful.client.restore),
-
- -- Prompt
- awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end),
-
- awful.key({ modkey }, "x",
- function ()
- awful.prompt.run({ prompt = "Run Lua code: " },
- mypromptbox[mouse.screen].widget,
- awful.util.eval, nil,
- awful.util.getdir("cache") .. "/history_eval")
- end)
-)
-
--- Standard awesome per-client controls
-clientkeys = awful.util.table.join(
- awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end),
- awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end),
- awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ),
- awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
- awful.key({ modkey, }, "o", awful.client.movetoscreen ),
- awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end),
- awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end),
- awful.key({ modkey, }, "n",
- function (c)
- -- The client currently has the input focus, so it cannot be
- -- minimized, since minimized clients can't have the focus.
- c.minimized = true
- end),
- awful.key({ modkey, }, "m",
- function (c)
- c.maximized_horizontal = not c.maximized_horizontal
- c.maximized_vertical = not c.maximized_vertical
- end)
-)
-
--- Compute the maximum number of digit we need, limited to 9
-keynumber = 0
-for s = 1, screen.count() do
- keynumber = math.min(9, math.max(#tags[s], keynumber));
-end
-
--- Bind all key numbers to tags
-for i = 1, keynumber do
- globalkeys = awful.util.table.join(globalkeys,
- awful.key({ modkey }, "#" .. i + 9,
- function ()
- local screen = mouse.screen
- if tags[screen][i] then
- awful.tag.viewonly(tags[screen][i])
- end
- end),
- awful.key({ modkey, "Control" }, "#" .. i + 9,
- function ()
- local screen = mouse.screen
- if tags[screen][i] then
- awful.tag.viewtoggle(tags[screen][i])
- end
- end),
- awful.key({ modkey, "Shift" }, "#" .. i + 9,
- function ()
- if client.focus and tags[client.focus.screen][i] then
- awful.client.movetotag(tags[client.focus.screen][i])
- end
- end),
- awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
- function ()
- if client.focus and tags[client.focus.screen][i] then
- awful.client.toggletag(tags[client.focus.screen][i])
- end
- end))
-end
-
--- Bind mouse actions
-clientbuttons = awful.util.table.join(
- awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
- awful.button({ modkey }, 1, awful.mouse.client.move),
- awful.button({ modkey }, 3, awful.mouse.client.resize))
-
--- Apply root window bindings
-root.keys(globalkeys)
-
--- Rules for new windows
-awful.rules.rules = {
- { rule = { },
- properties = { focus = true,
- size_hints_honor = false,
- keys = clientkeys,
- buttons = clientbuttons } },
- { rule = { class = "MPlayer" },
- properties = { floating = true } },
- { rule = { class = "Exe" }, -- youtube fullscreen
- properties = { floating = true }},
- { rule = { class = "Steam" },
- properties = { floating = true,
- tag = tags[1][3] } },
- { rule = { class = "hl2_linux" },
- properties = { floating = true,
- tag = tags[1][3] } },
- { rule = { class = "Screenkey" },
- properties = { floating = true,
- tag = tags[2][6],
- geometry = { width = 400,
- height = 75,
- x = 2800,
- y = 20 } } }
-}
-
--- Management hooks
-client.add_signal("manage", function (c, startup)
-
- -- Sloppy focus
- c:add_signal("mouse::enter", function(c)
- if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
- and awful.client.focus.filter(c) then
- client.focus = c
- end
- end)
-
- -- Only place new windows if they don't already have a position
- if not startup then
- if not c.size_hints.user_position and not c.size_hints.program_position then
- awful.placement.no_overlap(c)
- awful.placement.no_offscreen(c)
- end
- end
-end)
-
diff --git a/i3/config b/i3/config
new file mode 100644
index 00000000..5337eb6a
--- /dev/null
+++ b/i3/config
@@ -0,0 +1,108 @@
+# Use Mod4 as modifier
+set $mod Mod4
+
+# Use Verdana as the system font
+font pango:Verdana 7
+
+# Use Mouse+$mod to drag floating windows to their wanted position
+floating_modifier $mod
+
+# Mod+Shift+r restarts i3wm
+bindsym $mod+Shift+r restart
+
+# Mod+Shift+q logs out of i3wm
+bindsym $mod+Shift+q exit
+
+# Mod+Enter starts a terminal
+bindsym $mod+Return exec urxvtcd
+
+# Mod+Shift+c kills the focussed window
+bindsym $mod+Shift+c kill
+
+# Mod+Shift+d runs Dmenu
+bindsym $mod+d exec dmenu_run
+
+# Mod+Shift+h/j/k/l change focus in a Vimlike way
+bindsym $mod+h focus left
+bindsym $mod+j focus down
+bindsym $mod+k focus up
+bindsym $mod+l focus right
+
+# Mod+Shift+h/j/k/l move the window in a Vimlike way
+bindsym $mod+Shift+h move left
+bindsym $mod+Shift+j move down
+bindsym $mod+Shift+k move up
+bindsym $mod+Shift+l move right
+
+# Mod+backslash splits horizontally
+bindsym $mod+backslash split h
+
+# Mod+minus splits vertically
+bindsym $mod+minus split v
+
+# Mod+f makes the focussed container fullscreen
+bindsym $mod+f fullscreen
+
+# Mod+s/w/e changes to stacking/tabbed/togglesplit layout
+bindsym $mod+s layout stacking
+bindsym $mod+w layout tabbed
+bindsym $mod+e layout toggle split
+
+# Mod+space toggles between tiled and floating
+bindsym $mod+space floating toggle
+
+# Mod+a/z switches focus between container parent and child
+bindsym $mod+a focus parent
+bindsym $mod+z focus child
+
+# Mod+<n> switches to a workspace
+bindsym $mod+1 workspace 1
+bindsym $mod+2 workspace 2
+bindsym $mod+3 workspace 3
+bindsym $mod+4 workspace 4
+bindsym $mod+5 workspace 5
+bindsym $mod+6 workspace 6
+bindsym $mod+7 workspace 7
+bindsym $mod+8 workspace 8
+bindsym $mod+9 workspace 9
+
+# Mod+Shift+<n> moves a container to a workspace
+bindsym $mod+Shift+1 move container to workspace 1
+bindsym $mod+Shift+2 move container to workspace 2
+bindsym $mod+Shift+3 move container to workspace 3
+bindsym $mod+Shift+4 move container to workspace 4
+bindsym $mod+Shift+5 move container to workspace 5
+bindsym $mod+Shift+6 move container to workspace 6
+bindsym $mod+Shift+7 move container to workspace 7
+bindsym $mod+Shift+8 move container to workspace 8
+bindsym $mod+Shift+9 move container to workspace 9
+
+# Mod+r resizes a container
+bindsym $mod+r mode "resize"
+mode "resize" {
+ bindsym h resize shrink width 10 px or 10 ppt
+ bindsym j resize grow height 10 px or 10 ppt
+ bindsym k resize shrink height 10 px or 10 ppt
+ bindsym l resize grow width 10 px or 10 ppt
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+
+# i3bar at bottom of screen
+bar {
+ font pango:Verdana 7
+ position bottom
+ status_command i3status --config ~/.i3/status
+ workspace_buttons yes
+
+ colors {
+ background #111111
+ statusline #eeeeee
+
+ focused_workspace #ffffff #285577
+ active_workspace #ffffff #333333
+ inactive_workspace #888888 #222222
+ urgent_workspace #ffffff #900000
+ }
+}
+
diff --git a/i3/status b/i3/status
new file mode 100644
index 00000000..f9ea2982
--- /dev/null
+++ b/i3/status
@@ -0,0 +1,12 @@
+# i3status -- Just show load average and local time
+
+order += "load"
+order += "tztime local"
+
+load {
+ format = "%1min/%5min/%15min"
+}
+tztime local {
+ format = "%Y-%m-%d %H:%M:%S"
+}
+
diff --git a/install b/install
index f6a5aee7..7c6c7d2d 100755
--- a/install
+++ b/install
@@ -102,12 +102,12 @@ while getopts :gmntx opt; do
lns "$dotfiles"/tmux/tmux.conf "$HOME"/.tmux.conf
;;
x)
+ lns "$dotfiles"/i3 "$HOME"/.i3
lns "$dotfiles"/X/Xmodmap "$HOME"/.Xmodmap
lns "$dotfiles"/X/Xresources "$HOME"/.Xresources
lns "$dotfiles"/X/xsession "$HOME"/.xsession
lns "$dotfiles"/X/xsessionrc "$HOME"/.xsessionrc
lns "$dotfiles"/vim/gvimrc "$HOME"/.gvimrc
- lns "$dotfiles"/awesome "$HOME"/.config/awesome
;;
esac
done