diff --git a/.config/systemd/user/tmux.service b/.config/systemd/user/tmux.service new file mode 100644 index 0000000..4d7c54c --- /dev/null +++ b/.config/systemd/user/tmux.service @@ -0,0 +1,14 @@ +[Unit] +Description=Start tmux in detached session + +[Service] +Type=oneshot +RemainAfterExit=yes +KillMode=none +User=%I +WorkingDirectory=%h +ExecStart=/usr/bin/tmux -s %h -d +ExecStop=/usr/bin/tmux kill-session -t %h + +[Install] +WantedBy=multi-user.target diff --git a/.emacs b/.emacs index f345c9c..4169ac9 100644 --- a/.emacs +++ b/.emacs @@ -55,9 +55,15 @@ ;; Turn off indentation (use spaces instead) (setq-default indent-tabs-mode nil) +;; Turn on electric-indent-mode +(electric-indent-mode 1) + ;; Show column number in status bar (column-number-mode) +;; Set the fill-column for text filling +(setq fill-column 95) + ;; fixes color output issues; see: http://wiki.archlinux.org/index.php/Emacs#Colored_output_issues (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on) @@ -129,15 +135,12 @@ ;; On the creation of each frame checks whether it is a XWindow and if so sets ;; the background to black and the foreground to WhiteSmoke -(add-hook 'after-make-frame-functions - (lambda (frames) - (select-frame frame) - (if window-system (progn - (set-background-color "black") - (set-foreground-color "WhiteSmoke"))))) - -;; Set the default font (12 pixels tall) -(set-default-font "Terminus-12") +;; (add-hook 'after-make-frame-functions +;; (lambda (frames) +;; (select-frame frame) +;; (if window-system (progn +;; (set-background-color "black") +;; (set-foreground-color "WhiteSmoke"))))) ;; Set default tramp method to ssh (for security purposes) (setq tramp-default-method "ssh") @@ -149,6 +152,9 @@ (global-set-key "\C-x\C-b" 'ibuffer) (autoload 'ibuffer "ibuffer" "List buffers." t) +;; Setup ido-mode +(ido-mode t) + ;; Require ibuffer extentions (used for ibuffer-never-show-predicates) (require 'ibuf-ext) ;; Built-in (add-to-list 'ibuffer-never-show-predicates "^\\*slime-events\\*$") @@ -175,6 +181,7 @@ (name . "^\\.gnus") (name . "^\\.xmobarrc") (name . "^\\.Xdefaults") + (name . "^\\.Xresources") (name . "^\\.screenrc") (name . "^\\.xbindkeysrc") (name . "^\\.racketrc") @@ -202,7 +209,11 @@ (mode . php-mode) (mode . xml-mode) (mode . html-mode) - (mode . js-mode))) + (mode . css-mode) + (mode . haml-mode) + (mode . sass-mode) + (mode . scss-mode) + (mode . js-mode))) ("REPL" (or (mode . geiser-mode) (mode . slime-repl-mode) @@ -233,9 +244,6 @@ (name . "^\\*Backtrace\\*$") (mode . package-menu-mode) (mode . compilation-mode))) - ("weechat" (or - (name . "^\\*weechat.*\\*$") - (mode . weechat-mode))) ("org" (or (mode . org-mode) (name . "^\\.org$") @@ -363,6 +371,24 @@ org-src-fontify-natively t org-enforce-todo-dependencies t) +;; Enable org-mode capture +(setq org-default-notes-file "~/.org/notes.org") ;; (concat org-directory "/notes.org")) +(define-key global-map "\C-cc" 'org-capture) + +(setq org-capture-templates + '(("t" "General Todo" entry + (file+olp "~/.org/notes.org" "Notes" "Tasks" "General") + "* TODO %?\n %i\n" :kill-buffer) + ("f" "Todo in current file" entry + (file+olp "~/.org/notes.org" "Notes" "Tasks" "Per-File") + "* TODO %? %i\n See: %a") + ("r" "Remember something" entry + (file+olp "~/.org/notes.org" "Notes" "Things to Remember") + "* %?" :kill-buffer) + ("j" "Journal" entry + (file+datetree "~/.org/notes.org") + "* %?\nEntered on %U\n %i\n %a" :kill-buffer))) + ;; Add additional languages for org-babel (now part of org-mode) (org-babel-do-load-languages 'org-babel-load-languages @@ -406,9 +432,6 @@ ;; (setq py-python-command "/usr/bin/ipython") (require 'ipython) ;; ELPA -;; Make a variable alias because ipython-mode references python-mode-map as py-mode-map -(defvaralias 'python-mode-map 'py-mode-map) - ;; Setup emacs-lua-mode (setq auto-mode-alist (cons '("\.lua$" . lua-mode) auto-mode-alist)) ;; ELPA (autoload 'lua-mode "lua-mode" "Lua editing mode." t) @@ -450,6 +473,7 @@ ;; Setup rainbow-delimiters *BROKEN* (require 'rainbow-delimiters) ;; ELPA +(add-hook 'prog-mode-hook 'rainbow-delimiters-mode) ;;(activate-mode-with-hooks (lambda () (with-current-buffer buf (rainbow-delimiters-mode))) lispy-langs-hooks) ;; Setup rainbow-mode ;; ELPA @@ -518,10 +542,15 @@ ;;(add-to-list 'ac-dictionary-directories "/usr/share/emacs/site-lisp/auto-complete/ac-dict") (ac-config-default) +;; Set trigger keys so yasnippet and auto-complete play nicely. If tab is pressed and the word at point exists +;; in yasnippet, then yassippet will be used; otherwise auto-complete will be used. +(ac-set-trigger-key "TAB") +(ac-set-trigger-key "") + ;; Setup yasnippet-mode (not yasnippet-bundle) (require 'yasnippet) ;; ELPA -;;(yas/initialize) -(yas/load-directory "~/.emacs.d/elpa/yasnippet-20131026.1440/snippets") +(yas/load-directory "~/.emacs.d/elpa/yasnippet-20140106.1009") +(yas-global-mode 1) ;; Enable flyspell-mode (ac-flyspell-workaround) @@ -558,7 +587,12 @@ ("\\.scala$" . ["scala-template.scala" auto-update-generic-template]) ("\\.htm\\|html$" . ["html-template.html" auto-update-generic-template]) ("\\.js$" . ["java-script-template.js" auto-update-generic-template]) - ("\\.css$" . ["css-template.css" auto-update-generic-template]))) + ("\\.css$" . ["css-template.css" auto-update-generic-template]) + ("\\.scss$" . ["scss-template.scss" auto-update-generic-template]) + ("\\.sass$" . ["sass-template.sass" auto-update-generic-template]) + ("\\.haml$" . ["haml-template.haml" auto-update-generic-template]) + ("\\.markdown$" . ["markdown-template.markdown" auto-update-generic-template]) + ("\\.latex$" . ["latex-template.latex" auto-update-generic-template]))) (setq auto-insert 'other) (defun auto-update-generic-template () @@ -661,20 +695,49 @@ (select-window first-win) (if this-win-2nd (other-window 1)))))) -;; Assign keybinding to toggle split orientation of 2 adjacent windows +;; TODO: Modify the below function to accept the universal argument. +;; Specifically an integer argument (n) where: +;; - if negative denotes backwards rotation repeated |n| times +;; - if positive denotes forwards rotation repeated n times +;; - otherwise, no numerical value is given for the universal argument; ignore. + +;; Rotates windows +;; Thanks to http://www.emacswiki.org/emacs/TransposeWindows +(defun rotate-windows () + "Rotate your windows" + (interactive) + (cond + ((not (> (count-windows) 1)) + (message "You can't rotate a single window!")) + (t + (let ((i 0) + (num-windows (count-windows))) + (while (< i (- num-windows 1)) + (let* ((w1 (elt (window-list) i)) + (w2 (elt (window-list) (% (+ i 1) num-windows))) + (b1 (window-buffer w1)) + (b2 (window-buffer w2)) + (s1 (window-start w1)) + (s2 (window-start w2))) + (set-window-buffer w1 b2) + (set-window-buffer w2 b1) + (set-window-start w1 s2) + (set-window-start w2 s1) + (setq i (1+ i)))))))) + +;; Assign keybinding to toggle split orientation of 2 adjacent windows, and to rotate windows (define-key ctl-x-4-map "t" 'toggle-window-split) +(global-set-key "\C-cr" 'rotate-windows) ;; Force ediff sessions to run in the same frame (setq ediff-window-setup-function 'ediff-setup-windows-plain) -;; Remove menu-bar +;; This is now done ine ~/.Xresources +;; Remove menu-bar, tool-bar, and scroll-bars (menu-bar-mode -1) - -;; Remove tool-bar -(tool-bar-mode -1) - -;; Remove scroll bars -(scroll-bar-mode -1) +;;(tool-bar-mode -1) +;;(scroll-bar-mode -1) +;;(set-default-font "Terminus-12") ;; Stop startup screen (setq inhibit-startup-screen t) @@ -718,12 +781,6 @@ consisting of lists of buffers opened by each respective FP argument." ;; (add-to-list 'load-path "~/.emacs.d/el-get/el-get") -;; *TODO*: PLAIN TEXT PASSWORD === BAD -;; Setup weechat client (note requires weechat relay (port 9000) -(require 'weechat) -(if (daemonp) - (weechat-connect "localhost" 9000 "linux:netbeans" nil)) - ;; *BROKEN*..can't connect to dbus for some reason? ;; ;; Setup el-get ;; (unless (require 'el-get nil t) @@ -741,8 +798,8 @@ consisting of lists of buffers opened by each respective FP argument." ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. - '(ansi-color-names-vector ["#2d3743" "#ff4242" "#74af68" "#dbdb95" "#34cae2" "#008b8b" "#00ede1" "#e1e1e0"]) - '(custom-safe-themes (quote ("36a309985a0f9ed1a0c3a69625802f87dee940767c9e200b89cdebdb737e5b29" "dc8693659115ea453f849f47509b903da3801b5f1521a73fa31556a9a3558517" default))) + '(coffee-tab-width 2) + '(custom-safe-themes (quote ("fc5fcb6f1f1c1bc01305694c59a1a861b008c534cae8d0e48e4d5e81ad718bc6" "b5aaedbcd4d81925c8b2bc21dbed6d0a5a6854b6ad745e948efd55e42b48bd04" "8aebf25556399b58091e533e455dd50a6a9cba958cc4ebb0aab175863c25b9a4" "36a309985a0f9ed1a0c3a69625802f87dee940767c9e200b89cdebdb737e5b29" "dc8693659115ea453f849f47509b903da3801b5f1521a73fa31556a9a3558517" default))) '(fill-column 95) '(highlight-current-line-globally t nil (highlight-current-line)) '(highlight-current-line-ignore-regexp "Faces\\|Colors\\| \\*Mini\\|\\**\\*") @@ -760,5 +817,5 @@ consisting of lists of buffers opened by each respective FP argument." ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. - '(font-lock-function-name-face ((t (:foreground "mediumspringgreen" :weight bold :height 1.0)))) '(highlight-current-line-face ((t (:background "gray10"))))) +(put 'dired-find-alternate-file 'disabled nil)