diff options
| author | lassulus <lassulus@lassul.us> | 2019-09-25 16:28:56 +0200 | 
|---|---|---|
| committer | lassulus <lassulus@lassul.us> | 2019-09-25 16:28:56 +0200 | 
| commit | 6a62fd95c616849e7a70fd12eebfacaf12738345 (patch) | |
| tree | 353f148c3093b3d967ba7454c476265e5718bc14 | |
| parent | 7dabe57db208425e2f5c98daf3e705c5215fe98c (diff) | |
| parent | 68e34db609102abe3600c5f4abb9058f9ff977f5 (diff) | |
Merge remote-tracking branch 'enklave/master'
| -rw-r--r-- | jeschli/1systems/bolide/config.nix | 44 | ||||
| -rw-r--r-- | jeschli/1systems/brauerei/config.nix | 44 | ||||
| -rw-r--r-- | jeschli/1systems/reagenzglas/config.nix | 85 | ||||
| -rw-r--r-- | jeschli/1systems/reagenzglas/desktop.nix | 25 | ||||
| -rw-r--r-- | jeschli/1systems/reagenzglas/hardware-configuration.nix | 37 | ||||
| -rw-r--r-- | jeschli/1systems/reagenzglas/i3-configuration.nix | 176 | ||||
| -rw-r--r-- | jeschli/2configs/IM.nix | 1 | ||||
| -rw-r--r-- | jeschli/2configs/emacs-org-agenda.nix | 2025 | ||||
| -rw-r--r-- | jeschli/2configs/emacs.nix | 104 | ||||
| -rw-r--r-- | jeschli/2configs/i3.nix | 248 | ||||
| -rw-r--r-- | jeschli/5pkgs/simple/xmonad-jeschli/default.nix | 300 | 
11 files changed, 2723 insertions, 366 deletions
| diff --git a/jeschli/1systems/bolide/config.nix b/jeschli/1systems/bolide/config.nix index 5cb6ef5..d859833 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 aabb4b7..860c5d1 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 0000000..2eefb23 --- /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 0000000..0c42981 --- /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 0000000..55f5532 --- /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 0000000..c9968c1 --- /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 288134f..2366726 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 0000000..ded90ea --- /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) +                            (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks))) +                (tags "@buero|@vpn|WORK-REFILE/" +                      ((org-agenda-overriding-header "Tasks to Archive") +                       (org-agenda-skip-function 'bh/skip-non-archivable-tasks) +                       (org-tags-match-list-sublevels nil)))) +               nil) +               ("2" "Agenda (@inet|@home))" +               ((agenda "" nil) +                (tags "REFILE" +                      ((org-agenda-overriding-header "Tasks to Refile") +                       (org-tags-match-list-sublevels nil))) +                (tags-todo "@inet|@home-CANCELLED/!" +                           ((org-agenda-overriding-header "Stuck Projects") +                            (org-agenda-skip-function 'bh/skip-non-stuck-projects) +                            (org-agenda-sorting-strategy +                             '(category-keep)))) +                (tags-todo "@inet|@home-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 "@inet|@home-CANCELLED/!NEXT" +                           ((org-agenda-overriding-header (concat "Project Next Tasks" +          | 
