diff options
author | Vincent Ambo <tazjin@gmail.com> | 2017-10-20T21·22+0200 |
---|---|---|
committer | Vincent Ambo <tazjin@gmail.com> | 2017-10-20T22·05+0200 |
commit | 7fe75e01386f24385ae9ccc624e3d8561df8bcbb (patch) | |
tree | b72d47b17c2006a5f103da3e1c4d53552b35b26c | |
parent | a8a9bf130048ec1c71ed44a3930da0bd13c626d8 (diff) |
feat(dotfiles): Begin controlling various dotfiles from Nix
Moves my i3 configuration into a nix derivation called 'tazjins-dotfiles'. A good step towards fully declarative system configuration!
-rw-r--r-- | configuration.nix | 1 | ||||
-rw-r--r-- | desktop.nix | 6 | ||||
-rw-r--r-- | dotfiles.nix | 31 | ||||
-rw-r--r-- | dotfiles/i3.conf | 163 | ||||
-rw-r--r-- | stallo-configuration.nix | 1 |
5 files changed, 200 insertions, 2 deletions
diff --git a/configuration.nix b/configuration.nix index a0d06e9554d5..aae8c61db41f 100644 --- a/configuration.nix +++ b/configuration.nix @@ -11,6 +11,7 @@ ./local-configuration.nix ./packages.nix ./desktop.nix + ./dotfiles.nix ]; # Use the systemd-boot EFI boot loader. diff --git a/desktop.nix b/desktop.nix index 541d1a458049..85e9f4b9a8c6 100644 --- a/desktop.nix +++ b/desktop.nix @@ -10,7 +10,11 @@ in { services.xserver.xkbOptions = "caps:super, grp:shifts_toggle"; # configure desktop environment: - services.xserver.windowManager.i3.enable = true; + services.xserver.windowManager.i3 = { + enable = true; + configFile = "/etc/i3/config"; + }; + services.compton.enable = true; services.compton.backend = "xrender"; # this should be the default! diff --git a/dotfiles.nix b/dotfiles.nix new file mode 100644 index 000000000000..8ba5f976f76e --- /dev/null +++ b/dotfiles.nix @@ -0,0 +1,31 @@ +# Bundle configuration files into a derivation. +# I call this derivation dotfiles despite that not technically being true +# anymore ... + +{ config, pkgs, ...}: + +let dotfiles = pkgs.stdenv.mkDerivation { + name = "tazjins-dotfiles"; + + srcs = [ + ./dotfiles + ]; + + installPhase = '' + mkdir -p $out/dotfiles + cp ./* $out/dotfiles/ + ''; +}; +in { + # /etc/ is a special place in NixOS! + # Symlinks that need to be created there must be specified explicitly. + environment.etc = { + "i3/config" = { + source = "${dotfiles}/dotfiles/i3.conf"; + # Setting a mode causes Nix to copy the file instead of symlinking it. + # For i3 config in particular this is desirable because I want to be able + # to modify and reload it before committing a change. + mode = "0644"; + }; + }; +} diff --git a/dotfiles/i3.conf b/dotfiles/i3.conf new file mode 100644 index 000000000000..d42ce2716cdf --- /dev/null +++ b/dotfiles/i3.conf @@ -0,0 +1,163 @@ +# i3 config file (v4) +# +# Please see http://i3wm.org/docs/userguide.html for a complete reference! + +set $mod Mod4 + +font pango:Input Mono 11 + +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + +# start a terminal +bindsym $mod+Return exec alacritty + +# start an emacs frame +bindsym $mod+e exec emacsclient -c -n + +# kill focused window +bindsym $mod+Shift+q kill + +# start rofi (a program launcher) +bindsym XF86Search exec rofi -show run +bindsym $mod+d exec rofi -show run + +bindsym $mod+p exec passmenu + +# change focus +bindsym $mod+j focus left +bindsym $mod+k focus down +bindsym $mod+l focus up +bindsym $mod+semicolon focus right + +# alternatively, you can use the cursor keys: +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +# move focused window +bindsym $mod+Shift+j move left +bindsym $mod+Shift+k move down +bindsym $mod+Shift+l move up +bindsym $mod+Shift+semicolon move right + +# alternatively, you can use the cursor keys: +bindsym $mod+Shift+Left move left +bindsym $mod+Shift+Down move down +bindsym $mod+Shift+Up move up +bindsym $mod+Shift+Right move right + +# split in horizontal orientation +bindsym $mod+h split h + +# split in vertical orientation +bindsym $mod+v split v + +# enter fullscreen mode for the focused container +bindsym $mod+f fullscreen toggle + +# change container layout (stacked, tabbed, toggle split) +bindsym $mod+s layout stacking +bindsym $mod+w layout tabbed +bindsym $mod+x layout toggle split + +# 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+d focus child + +# switch to 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 +bindsym $mod+0 workspace 10 + +# move focused container to 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 +bindsym $mod+Shift+0 move container to workspace 10 + +# move workspace to next output +bindsym $mod+Shift+m move workspace to output left + +# reload the configuration file +bindsym $mod+Shift+c 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+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'" + +# resize window (you can also use the mouse for that) +mode "resize" { + # These bindings trigger as soon as you enter the resize mode + + # Pressing left will shrink the window’s width. + # Pressing right will grow the window’s width. + # Pressing up will shrink the window’s height. + # Pressing down will grow the window’s height. + bindsym j resize shrink width 10 px or 10 ppt + bindsym k resize grow height 10 px or 10 ppt + bindsym l resize shrink height 10 px or 10 ppt + bindsym semicolon resize grow width 10 px or 10 ppt + + # same bindings, but for the arrow keys + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt + bindsym Right resize grow width 10 px or 10 ppt + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+r mode "resize" + +# Start i3bar to display a workspace bar (plus the system information i3status +# finds out, if available) +bar { + status_command i3status + position top +} + +# Disable window title bars +new_window 1pixel + +# Switch back and forth between workspaces automatically +workspace_auto_back_and_forth yes + +# Brightness controls +bindsym XF86MonBrightnessDown exec light -U 10 +bindsym XF86MonBrightnessUp exec light -A 10 + +# Volume controls +bindsym XF86AudioMute exec --no-startup-id "pulseaudio-ctl mute" +bindsym XF86AudioRaiseVolume exec --no-startup-id "pulseaudio-ctl up" +bindsym XF86AudioLowerVolume exec --no-startup-id "pulseaudio-ctl down" + +# Lock screen +bindsym F7 exec i3lock + +# Enable floating for popup windows (e.g. pinentry) +for_window [title="pinentry"] floating enable diff --git a/stallo-configuration.nix b/stallo-configuration.nix index 57f55d774d2a..2925152824e6 100644 --- a/stallo-configuration.nix +++ b/stallo-configuration.nix @@ -1,4 +1,3 @@ - # Local configuration for 'stallo' (Home desktop PC) { config, ...}: |