summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlassulus <lassulus@lassul.us>2019-09-25 16:28:56 +0200
committerlassulus <lassulus@lassul.us>2019-09-25 16:28:56 +0200
commitd94cdfaff478b848aa85849402057ba2054021fb (patch)
treec22bdf8b23167e95a20018402b2657e499117b1b
parent3624f3cdc33a95e05db04e5af02933ee28bbd547 (diff)
parent4153a452495a061d6e5c756b0c4dc8ac105978a2 (diff)
Merge remote-tracking branch 'enklave/master'
-rw-r--r--jeschli/1systems/bolide/config.nix44
-rw-r--r--jeschli/1systems/brauerei/config.nix44
-rw-r--r--jeschli/1systems/reagenzglas/config.nix85
-rw-r--r--jeschli/1systems/reagenzglas/desktop.nix25
-rw-r--r--jeschli/1systems/reagenzglas/hardware-configuration.nix37
-rw-r--r--jeschli/1systems/reagenzglas/i3-configuration.nix176
-rw-r--r--jeschli/2configs/IM.nix1
-rw-r--r--jeschli/2configs/emacs-org-agenda.nix2025
-rw-r--r--jeschli/2configs/emacs.nix104
-rw-r--r--jeschli/2configs/i3.nix248
-rw-r--r--jeschli/5pkgs/simple/xmonad-jeschli/default.nix300
-rw-r--r--krebs/3modules/jeschli/default.nix28
12 files changed, 2751 insertions, 366 deletions
diff --git a/jeschli/1systems/bolide/config.nix b/jeschli/1systems/bolide/config.nix
index 5cb6ef568..d859833ac 100644
--- a/jeschli/1systems/bolide/config.nix
+++ b/jeschli/1systems/bolide/config.nix
@@ -12,7 +12,8 @@ in
./hardware-configuration.nix
<stockholm/jeschli>
<stockholm/jeschli/2configs/urxvt.nix>
- # <stockholm/jeschli/2configs/emacs.nix>
+ <stockholm/jeschli/2configs/i3.nix>
+ <stockholm/jeschli/2configs/emacs.nix>
];
krebs.build.host = config.krebs.hosts.bolide;
@@ -56,6 +57,7 @@ in
};
nixpkgs.config.allowUnfree = true;
environment.systemPackages = with pkgs; [
+ rofi
wget vim
# system helper
ag
@@ -78,13 +80,14 @@ in
chromium
google-chrome
# programming languages
+ vscode
go
gcc9
ccls
unstable.clang_8
ghc
- python35
- python35Packages.pip
+ python37
+ python37Packages.pip
# go tools
golint
gotools
@@ -98,42 +101,13 @@ in
zathura
];
- # Some programs need SUID wrappers, can be configured further or are
- # started in user sessions.
- # programs.bash.enableCompletion = true;
- # programs.mtr.enable = true;
- # programs.gnupg.agent = { enable = true; enableSSHSupport = true; };
-
- # List services that you want to enable:
# Enable the OpenSSH daemon.
- services.openssh.enable = true;
-
-
- services.xserver = {
-
- enable = true;
-
- desktopManager = {
- xfce.enable = true;
- gnome3.enable = true;
- };
-# # Don't install feh into systemPackages
-# # refs <nixpkgs/nixos/modules/services/x11/desktop-managers>
-# desktopManager.session = lib.mkForce [];
-#
-# enable = true;
-# display = 11;
-# tty = 11;
-#
-# dpi = 96;
-
- videoDrivers = [ "nvidia" ];
- };
+ services.openssh.enable = true;
- services.xserver.windowManager.i3.enable = true;
+ services.xserver.videoDrivers = [ "nvidia" ];
- users.extraUsers.jeschli = {
+users.extraUsers.jeschli = {
isNormalUser = true;
extraGroups = ["docker" "vboxusers" "audio"];
uid = 1000;
diff --git a/jeschli/1systems/brauerei/config.nix b/jeschli/1systems/brauerei/config.nix
index aabb4b7ba..860c5d11c 100644
--- a/jeschli/1systems/brauerei/config.nix
+++ b/jeschli/1systems/brauerei/config.nix
@@ -1,6 +1,5 @@
{ config, pkgs, lib, ... }:
let
- xmonad-jeschli = pkgs.callPackage <stockholm/jeschli/5pkgs/simple/xmonad-jeschli> { inherit config; };
mainUser = config.krebs.build.user.name;
unstable = import <nixpkgs-unstable> { config = { allowUnfree = true; }; };
in
@@ -9,6 +8,7 @@ in
<stockholm/jeschli>
./hardware-configuration.nix
<home-manager/nixos>
+ <stockholm/jeschli/2configs/emacs.nix>
<stockholm/jeschli/2configs/urxvt.nix>
<stockholm/jeschli/2configs/steam.nix>
<stockholm/jeschli/2configs/virtualbox.nix>
@@ -117,29 +117,29 @@ in
# programs.mtr.enable = true;
programs.gnupg.agent = { enable = true; enableSSHSupport = true; };
- home-manager.useUserPackages = true;
- home-manager.users.jeschli = {
- home.stateVersion = "19.03";
- };
+# home-manager.useUserPackages = true;
+# home-manager.users.jeschli = {
+# home.stateVersion = "19.03";
+# };
# home-manager.enable = true;
- home-manager.users.jeschli.home.file = {
- ".emacs.d" = {
- source = pkgs.fetchFromGitHub {
- owner = "jeschli";
- repo = "emacs.d";
- rev = "8ed6c40";
- sha256 = "1q2y478srwp9f58l8cixnd2wj51909gp1z68k8pjlbjy2mrvibs0";
- };
- recursive = true;
- };
- };
+# home-manager.users.jeschli.home.file = {
+# ".emacs.d" = {
+# source = pkgs.fetchFromGitHub {
+# owner = "jeschli";
+# repo = "emacs.d";
+# rev = "8ed6c40";
+# sha256 = "1q2y478srwp9f58l8cixnd2wj51909gp1z68k8pjlbjy2mrvibs0";
+# };
+# recursive = true;
+# };
+# };
# List services that you want to enable:
# Enable the OpenSSH daemon.
services.openssh.enable = true;
- services.emacs.enable = true;
+# services.emacs.enable = true;
virtualisation.docker.enable = true;
@@ -151,16 +151,6 @@ in
gnome3.enable = true;
};
- windowManager = {
- session = [{
- name = "xmonad";
- start = ''
- ${xmonad-jeschli}/bin/xmonad &
- waitPID=$!
- '';
- }
- ];
- };
};
services.xserver.windowManager.i3.enable = true;
diff --git a/jeschli/1systems/reagenzglas/config.nix b/jeschli/1systems/reagenzglas/config.nix
new file mode 100644
index 000000000..2eefb23fb
--- /dev/null
+++ b/jeschli/1systems/reagenzglas/config.nix
@@ -0,0 +1,85 @@
+{ config, pkgs, ... }:
+with pkgs;
+let
+ rebuild_script = pkgs.writeTextFile {
+ name="rebuild";
+ text=''
+ #!/usr/bin/env sh
+ set -eu
+ sudo cp -r /etc/nixos ~/old-nixos
+ sudo cp -r $HOME/nixos /etc/
+ sudo nixos-rebuild switch
+ '';
+ executable=true;
+ };
+in
+{
+ imports =
+ [
+ <stockholm/jeschli>
+ <stockholm/jeschli/2configs/emacs.nix>
+ ./desktop.nix
+ ./i3-configuration.nix
+ ./hardware-configuration.nix
+ ];
+
+ # EFI systemd boot loader
+ boot.loader.systemd-boot.enable = true;
+
+ # Wireless network with network manager
+ krebs.build.host = config.krebs.hosts.brauerei;
+ # networking.hostName = "nixos"; # Define your hostname.
+ networking.networkmanager.enable = true;
+
+ # Allow unfree
+ nixpkgs.config.allowUnfree = true;
+
+ # Select internationalisation properties.
+ i18n = {
+ consoleKeyMap = "us";
+ defaultLocale = "en_US.UTF-8";
+ };
+
+ # Set your time zone.
+ time.timeZone = "Europe/Berlin";
+
+ # List packages installed in system profile. To search, run:
+ # $ nix search wget
+ environment.systemPackages = with pkgs; [
+ wget vim git
+ firefox
+ rofi
+ ];
+
+ # How I rebuild the system
+ environment.shellAliases = {
+ rebuild = rebuild_script;
+ };
+
+ # Define a user account. Don't forget to set a password with ‘passwd’.
+ users.users.ombi = {
+ isNormalUser = true;
+ extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
+ };
+
+ users.users.jeschli = {
+ isNormalUser = true;
+ };
+
+ services.xserver.synaptics.enable = true;
+
+ #Enable ssh daemon
+ services.openssh.enable = true;
+
+ users.users.root.openssh.authorizedKeys.keys = [
+ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDM1xtX/SF2IzfAIzrXvH4HsW05eTBX8U8MYlEPadq0DS/nHC45hW2PSEUOVsH0UhBRAB+yClVLyN+JAYsuOoQacQqAVq9R7HAoFITdYTMJCxVs4urSRv0pWwTopRIh1rlI+Q0QfdMoeVtO2ZKG3KoRM+APDy2dsX8LTtWjXmh/ZCtpGl1O8TZtz2ZyXyv9OVDPnQiFwPU3Jqs2Z036c+kwxWlxYc55FRuqwRtQ48c/ilPMu+ZvQ22j1Ch8lNuliyAg1b8pZdOkMJF3R8b46IQ8FEqkr3L1YQygYw2M50B629FPgHgeGPMz3mVd+5lzP+okbhPJjMrUqZAUwbMGwGzZ ombi@nixos"
+ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKFXgtbgeivxlMKkoEJ4ANhtR+LRMSPrsmL4U5grFUME jeschli@nixos"
+ ];
+
+ # This value determines the NixOS release with which your system is to be
+ # compatible, in order to avoid breaking some software such as database
+ # servers. You should change this only after NixOS release notes say you
+ # should.
+ system.stateVersion = "19.03"; # Did you read the comment?
+
+}
diff --git a/jeschli/1systems/reagenzglas/desktop.nix b/jeschli/1systems/reagenzglas/desktop.nix
new file mode 100644
index 000000000..0c4298109
--- /dev/null
+++ b/jeschli/1systems/reagenzglas/desktop.nix
@@ -0,0 +1,25 @@
+# Configuration for the desktop environment
+
+{ config, lib, pkgs, ... }:
+{
+ # Configure basic X-server stuff:
+ services.xserver = {
+ enable = true;
+ xkbOptions = "caps:super";
+ exportConfiguration = true;
+
+ displayManager.slim.enable = true;
+ };
+
+ # Configure fonts
+ fonts = {
+ fonts = with pkgs; [
+ corefonts
+ font-awesome-ttf
+ noto-fonts-cjk
+ noto-fonts-emoji
+ powerline-fonts
+ helvetica-neue-lt-std
+ ];
+ };
+}
diff --git a/jeschli/1systems/reagenzglas/hardware-configuration.nix b/jeschli/1systems/reagenzglas/hardware-configuration.nix
new file mode 100644
index 000000000..55f5532d6
--- /dev/null
+++ b/jeschli/1systems/reagenzglas/hardware-configuration.nix
@@ -0,0 +1,37 @@
+# Do not modify this file! It was generated by ‘nixos-generate-config’
+# and may be overwritten by future invocations. Please make changes
+# to /etc/nixos/configuration.nix instead.
+{ config, lib, pkgs, ... }:
+
+{
+ imports =
+ [ <nixpkgs/nixos/modules/installer/scan/not-detected.nix>
+ ];
+
+ boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
+ boot.initrd.kernelModules = [ "dm-snapshot" ];
+ boot.initrd.luks.devices = [
+ {
+ name = "root";
+ device = "/dev/nvme0n1p8";
+ preLVM = true;
+ }
+ ];
+ boot.kernelModules = [ "kvm-intel" ];
+ boot.extraModulePackages = [ ];
+
+ fileSystems."/" =
+ { device = "/dev/disk/by-uuid/4d01936e-c876-42c3-962a-d4a20ad0e2e0";
+ fsType = "ext4";
+ };
+
+ fileSystems."/boot" =
+ { device = "/dev/disk/by-uuid/D455-E4CC";
+ fsType = "vfat";
+ };
+
+ swapDevices = [ ];
+
+ nix.maxJobs = lib.mkDefault 8;
+ powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
+}
diff --git a/jeschli/1systems/reagenzglas/i3-configuration.nix b/jeschli/1systems/reagenzglas/i3-configuration.nix
new file mode 100644
index 000000000..c9968c17a
--- /dev/null
+++ b/jeschli/1systems/reagenzglas/i3-configuration.nix
@@ -0,0 +1,176 @@
+{pkgs, environment, config, lib, ... }:
+
+with pkgs;
+
+let
+ i3_config_file = pkgs.writeText "config" ''
+ set $mod Mod4
+
+ font pango:monospace 8
+
+ #font pango:DejaVu Sans Mono 8
+
+ # Before i3 v4.8, we used to recommend this one as the default:
+ # font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
+ # The font above is very space-efficient, that is, it looks good, sharp and
+ # clear in small sizes. However, its unicode glyph coverage is limited, the old
+ # X core fonts rendering does not support right-to-left and this being a bitmap
+ # font, it doesn’t scale on retina/hidpi displays.
+
+ # Use Mouse+$mod to drag floating windows to their wanted position
+ floating_modifier $mod
+
+ # start a terminal
+ bindsym $mod+Return exec i3-sensible-terminal
+
+ # kill focused window
+ bindsym $mod+Shift+q kill
+
+ # start dmenu (a program launcher)
+ # bindsym $mod+d exec dmenu_run
+
+ # start dmenu (a program launcher)
+ bindsym $mod+d exec ${pkgs.rofi}/bin/rofi -modi drun#run -combi-modi drun#run -show combi -show-icons -display-combi run
+
+ # There also is the (new) i3-dmenu-desktop which only displays applications
+ # shipping a .desktop file. It is a wrapper around dmenu, so you need that
+ # installed.
+ # bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
+
+ # 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+colon 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+e 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
+
+ # Define names for default workspaces for which we configure key bindings later on.
+ # We use variables to avoid repeating the names in multiple places.
+ set $ws1 "1"
+ set $ws2 "2"
+ set $ws3 "3"
+ set $ws4 "4"
+ set $ws5 "5"
+ set $ws6 "6"
+ set $ws7 "7"
+ set $ws8 "8"
+ set $ws9 "9"
+ set $ws10 "10"
+
+ # 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+1 move container to workspace $ws1
+ bindsym $mod+Shift+2 move container to workspace $ws2
+ bindsym $mod+Shift+3 move container to workspace $ws3
+ bindsym $mod+Shift+4 move container to workspace $ws4
+ bindsym $mod+Shift+5 move container to workspace $ws5
+ bindsym $mod+Shift+6 move container to workspace $ws6
+ bindsym $mod+Shift+7 move container to workspace $ws7
+ bindsym $mod+Shift+8 move container to workspace $ws8
+ bindsym $mod+Shift+9 move container to workspace $ws9
+ bindsym $mod+Shift+0 move container to workspace $ws10
+
+ # 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 or $mod+r
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+ bindsym $mod+r 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
+ }
+ '';
+
+in {
+
+ services.xserver.windowManager.i3 = {
+ enable = true;
+ package = pkgs.i3;
+ configFile = i3_config_file;
+ };
+
+}
diff --git a/jeschli/2configs/IM.nix b/jeschli/2configs/IM.nix
index 288134fa2..2366726fb 100644
--- a/jeschli/2configs/IM.nix
+++ b/jeschli/2configs/IM.nix
@@ -29,6 +29,7 @@ in {
jeschli.pubkey
jeschli-bln.pubkey
jeschli-brauerei.pubkey
+ jeschli-bolide.pubkey
];
packages = [ tmux ];
};
diff --git a/jeschli/2configs/emacs-org-agenda.nix b/jeschli/2configs/emacs-org-agenda.nix
new file mode 100644
index 000000000..ded90ea1a
--- /dev/null
+++ b/jeschli/2configs/emacs-org-agenda.nix
@@ -0,0 +1,2025 @@
+let
+ modifiedBerndHansen = ''
+;; Based on http://doc.norang.ca/org-mode.html
+;; Organize your life in plain text
+;; TODO: minimize this section
+(if (boundp 'org-mode-user-lisp-path)
+ (add-to-list 'load-path org-mode-user-lisp-path)
+ (add-to-list 'load-path (expand-file-name "~/git/org-mode/lisp")))
+
+(add-to-list 'auto-mode-alist '("\\.\\(org\\|org_archive\\|txt\\)$" . org-mode))
+(require 'org)
+
+(add-to-list 'org-modules 'org-habit)
+
+;;
+;; Standard key bindings
+(global-set-key "\C-cl" 'org-store-link)
+(global-set-key "\C-ca" 'org-agenda)
+(global-set-key "\C-cb" 'org-iswitchb)
+
+;; The following setting is different from the document so that you
+;; can override the document org-agenda-files by setting your
+;; org-agenda-files in the variable org-user-agenda-files
+;;
+;; (if (boundp 'org-user-agenda-files)
+;; (setq org-agenda-files org-user-agenda-files)
+;; (setq org-agenda-files (quote ("~/git/org"))))
+
+;; Custom Key Bindings
+(global-set-key (kbd "<f12>") 'org-agenda)
+(global-set-key (kbd "<S-f5>") 'bh/widen)
+(global-set-key (kbd "<f9> <f9>") 'bh/show-org-agenda)
+(global-set-key (kbd "<f9> b") 'bbdb)
+(global-set-key (kbd "<f9> c") 'calendar)
+(global-set-key (kbd "<f9> f") 'boxquote-insert-file)
+(global-set-key (kbd "<f9> g") 'gnus)
+(global-set-key (kbd "<f9> h") 'bh/hide-other)
+(global-set-key (kbd "<f9> n") 'bh/toggle-next-task-display)
+
+(global-set-key (kbd "<f9> I") 'bh/punch-in)
+(global-set-key (kbd "<f9> O") 'bh/punch-out)
+
+(global-set-key (kbd "<f9> o") 'bh/make-org-scratch)
+
+(global-set-key (kbd "<f9> r") 'boxquote-region)
+(global-set-key (kbd "<f9> s") 'bh/switch-to-scratch)
+
+(global-set-key (kbd "<f9> t") 'bh/insert-inactive-timestamp)
+(global-set-key (kbd "<f9> T") 'bh/toggle-insert-inactive-timestamp)
+
+(global-set-key (kbd "<f9> v") 'visible-mode)
+(global-set-key (kbd "<f9> l") 'org-toggle-link-display)
+(global-set-key (kbd "<f9> SPC") 'bh/clock-in-last-task)
+(global-set-key (kbd "C-<f9>") 'previous-buffer)
+(global-set-key (kbd "M-<f9>") 'org-toggle-inline-images)
+(global-set-key (kbd "C-x n r") 'narrow-to-region)
+(global-set-key (kbd "C-<f10>") 'next-buffer)
+(global-set-key (kbd "<f11>") 'org-clock-goto)
+(global-set-key (kbd "C-<f11>") 'org-clock-in)
+(global-set-key (kbd "C-s-<f12>") 'bh/save-then-publish)
+(global-set-key (kbd "C-c c") 'org-capture)
+
+(defun bh/hide-other ()
+ (interactive)
+ (save-excursion
+ (org-back-to-heading 'invisible-ok)
+ (hide-other)
+ (org-cycle)
+ (org-cycle)
+ (org-cycle)))
+
+(defun bh/set-truncate-lines ()
+ "Toggle value of truncate-lines and refresh window display."
+ (interactive)
+ (setq truncate-lines (not truncate-lines))
+ ;; now refresh window display (an idiom from simple.el):
+ (save-excursion
+ (set-window-start (selected-window)
+ (window-start (selected-window)))))
+
+(defun bh/make-org-scratch ()
+ (interactive)
+ (find-file "/tmp/publish/scratch.org")
+ (gnus-make-directory "/tmp/publish"))
+
+(defun bh/switch-to-scratch ()
+ (interactive)
+ (switch-to-buffer "*scratch*"))
+
+(setq org-todo-keywords
+ (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)")
+ (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" "PHONE" "MEETING"))))
+
+(setq org-todo-keyword-faces
+ (quote (("TODO" :foreground "red" :weight bold)
+ ("NEXT" :foreground "blue" :weight bold)
+ ("DONE" :foreground "forest green" :weight bold)
+ ("WAITING" :foreground "orange" :weight bold)
+ ("HOLD" :foreground "magenta" :weight bold)
+ ("CANCELLED" :foreground "forest green" :weight bold)
+ ("MEETING" :foreground "forest green" :weight bold)
+ ("PHONE" :foreground "forest green" :weight bold))))
+
+(setq org-use-fast-todo-selection t)
+
+(setq org-treat-S-cursor-todo-selection-as-state-change nil)
+
+(setq org-todo-state-tags-triggers
+ (quote (("CANCELLED" ("CANCELLED" . t))
+ ("WAITING" ("WAITING" . t))
+ ("HOLD" ("WAITING") ("HOLD" . t))
+ (done ("WAITING") ("HOLD"))
+ ("TODO" ("WAITING") ("CANCELLED") ("HOLD"))
+ ("NEXT" ("WAITING") ("CANCELLED") ("HOLD"))
+ ("DONE" ("WAITING") ("CANCELLED") ("HOLD")))))
+
+(setq org-directory "~/git/org")
+(setq org-default-notes-file "~/git/org/refile.org")
+
+;; I use C-c c to start capture mode
+(global-set-key (kbd "C-c c") 'org-capture)
+
+;; Capture templates for: TODO tasks, Notes, appointments, phone calls, meetings, and org-protocol
+(setq org-capture-templates
+ (quote (("t" "todo" entry (file "~/git/org/refile.org")
+ "* TODO %?\n%U\n%a\n" :clock-in t :clock-resume t)
+ ("r" "respond" entry (file "~/git/org/refile.org")
+ "* NEXT Respond to %:from on %:subject\nSCHEDULED: %t\n%U\n%a\n" :clock-in t :clock-resume t :immediate-finish t)
+ ("n" "note" entry (file "~/git/org/refile.org")
+ "* %? :NOTE:\n%U\n%a\n" :clock-in t :clock-resume t)
+ ("j" "Journal" entry (file+datetree "~/git/org/diary.org")
+ "* %?\n%U\n" :clock-in t :clock-resume t)
+ ("w" "org-protocol" entry (file "~/git/org/refile.org")
+ "* TODO Review %c\n%U\n" :immediate-finish t)
+ ("m" "Meeting" entry (file "~/git/org/refile.org")
+ "* MEETING with %? :MEETING:\n%U" :clock-in t :clock-resume t)
+ ("p" "Phone call" entry (file "~/git/org/refile.org")
+ "* PHONE %? :PHONE:\n%U" :clock-in t :clock-resume t)
+ ("h" "Habit" entry (file "~/git/org/refile.org")
+ "* NEXT %?\n%U\n%a\nSCHEDULED: %(format-time-string \"%<<%Y-%m-%d %a .+1d/3d>>\")\n:PROPERTIES:\n:STYLE: habit\n:REPEAT_TO_STATE: NEXT\n:END:\n"))))
+
+;; Remove empty LOGBOOK drawers on clock out
+(defun bh/remove-empty-drawer-on-clock-out ()
+ (interactive)
+ (save-excursion
+ (beginning-of-line 0)
+ (org-remove-empty-drawer-at "LOGBOOK" (point))))
+
+(add-hook 'org-clock-out-hook 'bh/remove-empty-drawer-on-clock-out 'append)
+
+; Targets include this file and any file contributing to the agenda - up to 9 levels deep
+(setq org-refile-targets (quote ((nil :maxlevel . 9)
+ (org-agenda-files :maxlevel . 9))))
+
+; Use full outline paths for refile targets - we file directly with IDO
+(setq org-refile-use-outline-path t)
+
+; Targets complete directly with IDO
+(setq org-outline-path-complete-in-steps nil)
+
+; Allow refile to create parent tasks with confirmation
+(setq org-refile-allow-creating-parent-nodes (quote confirm))
+
+; Use IDO for both buffer and file completion and ido-everywhere to t
+(setq org-completion-use-ido t)
+(setq ido-everywhere t)
+(setq ido-max-directory-size 100000)
+(ido-mode (quote both))
+; Use the current window when visiting files and buffers with ido
+(setq ido-default-file-method 'selected-window)
+(setq ido-default-buffer-method 'selected-window)
+; Use the current window for indirect buffer display
+(setq org-indirect-buffer-display 'current-window)
+
+;;;; Refile settings
+; Exclude DONE state tasks from refile targets
+(defun bh/verify-refile-target ()
+ "Exclude todo keywords with a done state from refile targets"
+ (not (member (nth 2 (org-heading-components)) org-done-keywords)))
+
+(setq org-refile-target-verify-function 'bh/verify-refile-target)
+
+;; Do not dim blocked tasks
+(setq org-agenda-dim-blocked-tasks nil)
+
+;; Compact the block agenda view
+(setq org-agenda-compact-blocks t)
+
+;; Custom agenda command definitions
+(setq org-agenda-custom-commands
+ (quote (("N" "Notes" tags "NOTE"
+ ((org-agenda-overriding-header "Notes")
+ (org-tags-match-list-sublevels t)))
+ ("h" "Habits" tags-todo "STYLE=\"habit\""
+ ((org-agenda-overriding-header "Habits")
+ (org-agenda-sorting-strategy
+ '(todo-state-down effort-up category-keep))))
+ (" " "Agenda"
+ ((agenda "" nil)
+ (tags "REFILE"
+ ((org-agenda-overriding-header "Tasks to Refile")
+ (org-tags-match-list-sublevels nil)))
+ (tags-todo "-CANCELLED/!"
+ ((org-agenda-overriding-header "Stuck Projects")
+ (org-agenda-skip-function 'bh/skip-non-stuck-projects)
+ (org-agenda-sorting-strategy
+ '(category-keep))))
+ (tags-todo "-HOLD-CANCELLED/!"
+ ((org-agenda-overriding-header "Projects")
+ (org-agenda-skip-function 'bh/skip-non-projects)
+ (org-tags-match-list-sublevels 'indented)
+ (org-agenda-sorting-strategy
+ '(category-keep))))
+ (tags-todo "-CANCELLED/!NEXT"
+ ((org-agenda-overriding-header (concat "Project Next Tasks"
+ (if bh/hide-scheduled-and-waiting-next-tasks
+ ""
+ " (including WAITING and SCHEDULED tasks)")))
+ (org-agenda-skip-function 'bh/skip-projects-and-habits-and-single-tasks)
+ (org-tags-match-list-sublevels t)
+ (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-todo-ignore-with-date bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-sorting-strategy
+ '(todo-state-down effort-up category-keep))))
+ (tags-todo "-REFILE-CANCELLED-WAITING-HOLD/!"
+ ((org-agenda-overriding-header (concat "Project Subtasks"
+ (if bh/hide-scheduled-and-waiting-next-tasks
+ ""
+ " (including WAITING and SCHEDULED tasks)")))
+ (org-agenda-skip-function 'bh/skip-non-project-tasks)
+ (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-todo-ignore-with-date bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-sorting-strategy
+ '(category-keep))))
+ (tags-todo "-REFILE-CANCELLED-WAITING-HOLD/!"
+ ((org-agenda-overriding-header (concat "Standalone Tasks"
+ (if bh/hide-scheduled-and-waiting-next-tasks
+ ""
+ " (including WAITING and SCHEDULED tasks)")))
+ (org-agenda-skip-function 'bh/skip-project-tasks)
+ (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-todo-ignore-with-date bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-sorting-strategy
+ '(category-keep))))
+ (tags-todo "-CANCELLED+WAITING|HOLD/!"
+ ((org-agenda-overriding-header (concat "Waiting and Postponed Tasks"
+ (if bh/hide-scheduled-and-waiting-next-tasks
+ ""
+ " (including WAITING and SCHEDULED tasks)")))
+ (org-agenda-skip-function 'bh/skip-non-tasks)
+ (org-tags-match-list-sublevels nil)
+ (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)))
+ (tags "-REFILE/"
+ ((org-agenda-overriding-header "Tasks to Archive")
+ (org-agenda-skip-function 'bh/skip-non-archivable-tasks)
+ (org-tags-match-list-sublevels nil))))
+ nil)
+ ("1" "Agenda (@buero|@vpn|WORK)"
+ ((agenda "" nil)
+ (tags "REFILE"
+ ((org-agenda-overriding-header "Tasks to Refile")
+ (org-tags-match-list-sublevels nil)))
+ (tags-todo "@buero|@vpn|WORK-CANCELLED/!"
+ ((org-agenda-overriding-header "Stuck Projects")
+ (org-agenda-skip-function 'bh/skip-non-stuck-projects)
+ (org-agenda-sorting-strategy
+ '(category-keep))))
+ (tags-todo "@buero|@vpn|WORK-HOLD-CANCELLED/!"
+ ((org-agenda-overriding-header "Projects")
+ (org-agenda-skip-function 'bh/skip-non-projects)
+ (org-tags-match-list-sublevels 'indented)
+ (org-agenda-sorting-strategy
+ '(category-keep))))
+ (tags-todo "@buero|@vpn|WORK-CANCELLED/!NEXT"
+ ((org-agenda-overriding-header (concat "Project Next Tasks"
+ (if bh/hide-scheduled-and-waiting-next-tasks
+ ""
+ " (including WAITING and SCHEDULED tasks)")))
+ (org-agenda-skip-function 'bh/skip-projects-and-habits-and-single-tasks)
+ (org-tags-match-list-sublevels t)
+ (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-todo-ignore-with-date bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-sorting-strategy
+ '(todo-state-down effort-up category-keep))))
+ (tags-todo "@buero|@vpn|WORK-REFILE-CANCELLED-WAITING-HOLD/!"
+ ((org-agenda-overriding-header (concat "Project Subtasks"
+ (if bh/hide-scheduled-and-waiting-next-tasks
+ ""
+ " (including WAITING and SCHEDULED tasks)")))
+ (org-agenda-skip-function 'bh/skip-non-project-tasks)
+ (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-todo-ignore-with-date bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-sorting-strategy
+ '(category-keep))))
+ (tags-todo "@buero|@vpn|WORK-REFILE-CANCELLED-WAITING-HOLD/!"
+ ((org-agenda-overriding-header (concat "Standalone Tasks"
+ (if bh/hide-scheduled-and-waiting-next-tasks
+ ""
+ " (including WAITING and SCHEDULED tasks)")))
+ (org-agenda-skip-function 'bh/skip-project-tasks)
+ (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-todo-ignore-with-date bh/hide-scheduled-and-waiting-next-tasks)
+ (org-agenda-sorting-strategy
+ '(category-keep))))
+ (tags-todo "@buero|@vpn|WORK-CANCELLED+WAITING|HOLD/!"
+ ((org-agenda-overriding-header (concat "Waiting and Postponed Tasks"
+ (if bh/hide-scheduled-and-waiting-next-tasks
+ ""
+ " (including WAITING and SCHEDULED tasks)")))
+ (org-agenda-skip-function 'bh/skip-non-tasks)
+ (org-tags-match-list-sublevels nil)
+ (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
+