diff --git a/inventory b/inventory
index 07904a8..431d8db 100644
--- a/inventory
+++ b/inventory
@@ -10,3 +10,6 @@ orion
[personal]
petrichor
orion
+
+[rpi]
+rp3b-cdev
\ No newline at end of file
diff --git a/roles/desktop/files/stumpwm-gnome.desktop b/roles/desktop/files/stumpwm-gnome.desktop
new file mode 100644
index 0000000..bdea3e7
--- /dev/null
+++ b/roles/desktop/files/stumpwm-gnome.desktop
@@ -0,0 +1,11 @@
+# -*- mode: conf -*-
+
+[Desktop Entry]
+Comment=Improved dynamic tiling window manager, registers with gnome session manager.
+Exec=stumpwm-gnome
+Name=stumpwm-gnome
+Type=Application
+X-GNOME-Autostart-Notify=false
+X-GNOME-Autostart-Phase=WindowManager
+X-GNOME-Provides=windowmanager
+X-GNOME-WMName=stumpwm
\ No newline at end of file
diff --git a/roles/desktop/files/sudoers b/roles/desktop/files/sudoers
new file mode 100644
index 0000000..3224b10
--- /dev/null
+++ b/roles/desktop/files/sudoers
@@ -0,0 +1,55 @@
+#
+# This file MUST be edited with the 'visudo' command as root.
+#
+# Please consider adding local content in /etc/sudoers.d/ instead of
+# directly modifying this file.
+#
+# See the man page for details on how to write a sudoers file.
+#
+Defaults env_reset
+Defaults mail_badpass
+Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
+Defaults use_pty
+Defaults !lecture
+
+# This preserves proxy settings from user environments of root
+# equivalent users (group sudo)
+Defaults:%sudo env_keep += "http_proxy https_proxy ftp_proxy all_proxy no_proxy"
+
+# This allows running arbitrary commands, but so does ALL, and it means
+# different sudoers have their choice of editor respected.
+Defaults:%sudo env_keep += "EDITOR"
+
+# Completely harmless preservation of a user preference.
+Defaults:%sudo env_keep += "GREP_COLOR"
+
+# While you shouldn't normally run git as root, you need to with etckeeper
+#Defaults:%sudo env_keep += "GIT_AUTHOR_* GIT_COMMITTER_*"
+
+# Per-user preferences; root won't have sensible values for them.
+#Defaults:%sudo env_keep += "EMAIL DEBEMAIL DEBFULLNAME"
+
+# "sudo scp" or "sudo rsync" should be able to use your SSH agent.
+Defaults:%sudo env_keep += "SSH_AGENT_PID SSH_AUTH_SOCK"
+
+# Ditto for GPG agent
+#Defaults:%sudo env_keep += "GPG_AGENT_INFO"
+
+# Host alias specification
+
+# User alias specification
+
+# Cmnd alias specification
+
+# User privilege specification
+root ALL=(ALL:ALL) ALL
+
+# Members of the admin group may gain root privileges
+%admin ALL=(ALL) ALL
+
+# Allow members of group sudo to execute any command
+%sudo ALL=(ALL:ALL) NOPASSWD: ALL
+
+# See sudoers(5) for more information on "@include" directives:
+
+@includedir /etc/sudoers.d
\ No newline at end of file
diff --git a/roles/desktop/tasks/main.yml b/roles/desktop/tasks/main.yml
index 7c839b3..0d2d14c 100644
--- a/roles/desktop/tasks/main.yml
+++ b/roles/desktop/tasks/main.yml
@@ -17,12 +17,22 @@
BACKSPACE="guess"
+- name: enable passwordless sudo for desktop users
+ become: true
+ ansible.builtin.copy:
+ src: "{{ role_path }}/files/sudoers"
+ dest: /etc/sudoers
+ mode: 0440
+ owner: root
+ group: root
+
- name: set up common desktop tools
become: true
ansible.builtin.apt: name={{ item }} state=present
with_items:
- acpitool
- emacs
+ - mate-terminal
- vim-gtk
- name: set up desktop environments
@@ -33,6 +43,15 @@
- i3lock
- stumpwm
+- name: install StumpWM gnome session
+ become: true
+ ansible.builtin.copy:
+ src: "{{ role_path }}/files/stumpwm-gnome.desktop"
+ dest: /usr/share/xsessions/stumpwm-gnome.desktop
+ mode: 0644
+ owner: root
+ group: root
+
- name: set up xprogs
become: true
ansible.builtin.apt: name={{ item }} state=present
@@ -43,4 +62,11 @@
- firefox
- gparted
- scrot
+ - thunar
+ - thunar-archive-plugin
+ - thunar-font-manager
+ - thunar-gtkhash
+ - thunar-vcs-plugin
+ - thunar-volman
- vlc
+ - xfce4-places-plugin
diff --git a/roles/development/tasks/main.yml b/roles/development/tasks/main.yml
index 6b33117..387cce0 100644
--- a/roles/development/tasks/main.yml
+++ b/roles/development/tasks/main.yml
@@ -10,10 +10,10 @@
- cmake
- devscripts
- gcc
+ - git
- golang-google-genproto-dev
- golang-goprotobuf-dev
- golang-protobuf-extensions-dev
- - git
- graphviz
- ipython3
- jq
@@ -21,6 +21,7 @@
- lua5.3
- luarocks
- make
+ - pgcli
- protobuf-compiler
- python3-pip
- python3-progressbar
diff --git a/roles/dotfiles/files/.stumpwmrc b/roles/dotfiles/files/.stumpwmrc
index 4db4307..e3778fa 100644
--- a/roles/dotfiles/files/.stumpwmrc
+++ b/roles/dotfiles/files/.stumpwmrc
@@ -1,228 +1,264 @@
-Content-Type: text/enriched
-Text-Width: 70
-
-;; #565766-*-lisp-*-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#565766
-;;; #565766INDEX ;;;
-;;; #565766- DEPRECATED - MANIFEST ;;;
-;;; #565766- SWANK INTERACTION ;;;
-;;; #565766- GENERAL CONFIG ;;;
-;;; #565766- UTILITY FUNCTIONS ;;;
-;;; #565766- KEY BINDING ;;;
-;;; #565766- EXECUTION ;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#565766
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#565766
-;;; #565766DEPRECATED - MANIFEST ;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#565766
-;; #565766without the ability to select localhost-only, we can't use
-;; #565766manifest at this time.
-;; #565766(defvar *manifest-url*
-;; #565766(manifest:start))
-;; #565766(defun browse-manifest ()
-;; #565766(format nil "exec ~A ~A" *default-browser* *manifest-url*))
-;; #565766(define-key *root-map* (kbd "C-d") (browse-manifest))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#565766
-;;; #565766SWANK INTERACTION ;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#565766
-;; #565766swank interaction allows us to connect to the StumpWM
-;; #565766process from emacs while it's running.
-
-(ql:quickload #a3646f:swank)
-
-(#93e57clet ((server-running nil))
- (defcommand swank () ()
- #627e95"Toggle the swank server on/off"
- (#93e57cif server-running
- (#93e57cprogn
- (swank:stop-server 4005)
- (echo-string
- (current-screen)
- #627e95"Stopping swank.")
- (setf server-running nil))
- (#93e57cprogn
- (swank:create-server #a3646f:port 4005
- #a3646f:style swank:*communication-style*
- #a3646f:dont-close t)
- (echo-string
- (current-screen)
- #627e95"Starting swank. M-x slime-connect RET RET, then (in-packqage stumpwm).")
- (setf server-running t)))))
+;; -*-lisp-*-
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; INDEX ;;;
+;;; - DEPRECATED - MANIFEST ;;;
+;;; - SWANK INTERACTION ;;;
+;;; - GENERAL CONFIG ;;;
+;;; - UTILITY FUNCTIONS ;;;
+;;; - KEY BINDING ;;;
+;;; - EXECUTION ;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#565766
-;;; #565766GENERAL CONFIG ;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#565766
-;; #565766this is where configuration parameters, the frame numbering
-;; #565766and switching, and other general configuration is set up.
-
-(#93e57cdefparameter #9e79b3*default-browser* #627e95"firefox")
-(#93e57cdefparameter #9e79b3*default-terminal* #627e95"mate-terminal")
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; DEPRECATED - MANIFEST ;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; without the ability to select localhost-only, we can't use
+;; manifest at this time.
+;; (defvar *manifest-url*
+;; (manifest:start))
+;; (defun browse-manifest ()
+;; (format nil "exec ~A ~A" *default-browser* *manifest-url*))
+;; (define-key *root-map* (kbd "C-d") (browse-manifest))
-;; #565766make frames 1-numbered (i.e. for getting with ALT-FN)
-(setf *frame-number-map* #627e95"1234567890")
+;; "Don't know how to REQUIRE SB-CLTL2"
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; SWANK INTERACTION ;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; swank interaction allows us to connect to the StumpWM
+;; process from emacs while it's running.
+(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
+ (user-homedir-pathname))))
+ (when (probe-file quicklisp-init)
+ (load quicklisp-init)))
+(ql:quickload :swank)
+
+(let ((server-running nil))
+ (defcommand swank () ()
+ "Toggle the swank server on/off"
+ (if server-running
+ (progn
+ (swank:stop-server 4005)
+ (echo-string
+ (current-screen)
+ "Stopping swank.")
+ (setf server-running nil))
+ (progn
+ (swank:create-server :port 4005
+ :style swank:*communication-style*
+ :dont-close t)
+ (echo-string
+ (current-screen)
+ "Starting swank. M-x slime-connect RET RET, then (in-packqage stumpwm).")
+ (setf server-running t)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; GENERAL CONFIG ;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; this is where configuration parameters, the frame numbering
+;; and switching, and other general configuration is set up.
+
+(defparameter *default-browser* "firefox")
+(defparameter *default-terminal* "mate-terminal")
+
+;; make frames 1-numbered (i.e. for getting with ALT-FN)
+(setf *frame-number-map* "1234567890")
(run-commands
- #627e95"gnewbg G2" ;; #565766F2
- #627e95"gnewbg G3" ;; #565766F3
- #627e95"gnewbg G4" ;; #565766F4
- #627e95"gnewbg G5" ;; #565766F5
- #627e95"gnewbg G6" ;; #565766F6
- #627e95"gnewbg G7" ;; #565766F7
- #627e95"gnewbg G8" ;; #565766F8
- #627e95"gnewbg G9" ;; #565766F9
- #627e95"gnewbg G10" ;; #565766F10
- #627e95"gnewbg G11" ;; #565766F11
- #627e95"gnewbg G12"
- #627e95"gnewbg G13"
- #627e95"gnewbg G14"
- #627e95"gnewbg G15"
+ "gnewbg G2" ;; F2
+ "gnewbg G3" ;; F3
+ "gnewbg G4" ;; F4
+ "gnewbg G5" ;; F5
+ "gnewbg G6" ;; F6
+ "gnewbg G7" ;; F7
+ "gnewbg G8" ;; F8
+ "gnewbg G9" ;; F9
+ "gnewbg G10" ;; F10
+ "gnewbg G11" ;; F11
+ "gnewbg G12"
+ "gnewbg G13"
+ "gnewbg G14"
+ "gnewbg G15"
+ "gnewbg G16"
+ "gnewbg G17"
+ "gnewbg G18"
+ "gnewbg G19")
- #627e95"gnewbg G16"
- #627e95"gnewbg G17"
- #627e95"gnewbg G18"
- #627e95"gnewbg G19")
-
-
-;; #565766Fluxbox-style Alt-F# virtual desktop (group in StumpWM-speak)
-;; #565766switching. Modified from:
-;; #565766http://hcl-club.lu/svn/development/lisp/.stumpwmrc
-(#93e57cloop for i from 1 to 9
+;; Fluxbox-style Alt-F# virtual desktop (group in StumpWM-speak)
+;; switching. Modified from:
+;; http://hcl-club.lu/svn/development/lisp/.stumpwmrc
+(loop for i from 1 to 9
do
- (#93e57cprogn
- (format t #627e95"Key: ~A~%" i)
+ (progn
+ (format t "Key: ~A~%" i)
(define-key *top-map*
- (kbd (format nil #627e95"M-~a" i))
- (format nil #627e95"gselect ~a" i))))
+ (kbd (format nil "M-~a" i))
+ (format nil "gselect ~a" i))))
-(define-key *top-map* (kbd #627e95"M-!") #627e95"gselect 10")
-(define-key *top-map* (kbd #627e95"M-@") #627e95"gselect 11")
-(define-key *top-map* (kbd #627e95"M-#") #627e95"gselect 12")
-(define-key *top-map* (kbd #627e95"M-$") #627e95"gselect 13")
-(define-key *top-map* (kbd #627e95"M-%") #627e95"gselect 14")
-(define-key *top-map* (kbd #627e95"M-^") #627e95"gselect 15")
-(define-key *top-map* (kbd #627e95"M-&") #627e95"gselect 16")
-(define-key *top-map* (kbd #627e95"M-*") #627e95"gselect 17")
-(define-key *top-map* (kbd #627e95"M-\(") #627e95"gselect 18")
-(define-key *top-map* (kbd #627e95"M-\)") #627e95"gselect 19")
+(define-key *top-map* (kbd "M-!") "gselect 10")
+(define-key *top-map* (kbd "M-@") "gselect 11")
+(define-key *top-map* (kbd "M-#") "gselect 12")
+(define-key *top-map* (kbd "M-$") "gselect 13")
+(define-key *top-map* (kbd "M-%") "gselect 14")
+(define-key *top-map* (kbd "M-^") "gselect 15")
+(define-key *top-map* (kbd "M-&") "gselect 16")
+(define-key *top-map* (kbd "M-*") "gselect 17")
+(define-key *top-map* (kbd "M-\(") "gselect 18")
+(define-key *top-map* (kbd "M-\)") "gselect 19")
-;; #565766set FFM
-(setf *mouse-focus-policy* #a3646f:sloppy)
+;; scale up the font
+(let ((font-size 22))
+ (stumpwm:set-font
+ (format nil "-*-*-bold-r-*-*-~D-240-*-*-*-*-*-*"
+ font-size)))
-;; #565766show input bar in centre of screen
-(setf *input-window-gravity* #a3646f:center)
+;; set FFM
+(setf *mouse-focus-policy* :sloppy)
+;; show input bar in centre of screen
+(setf *input-window-gravity* :center)
-;; #565766enable the mode-line (and preferably the system tray)
+;; enable the mode-line (and preferably the system tray)
-(setf *mode-line-position* #a3646f:bottom)
+(setf *mode-line-position* :bottom)
-(load-module #627e95"stumptray")
-
-
-(#93e57cdolist
+;;(load-module "stumptray")
+(dolist
(head (screen-heads (current-screen)))
-
(toggle-mode-line (current-screen) head))
+;; (stumptray::stumptray)
-(stumptray::stumptray)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; UTILITY FUNCTIONS ;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defvar *exec-base* #P "/usr/bin/")
+
+(defvar *scratchpad* nil)
+(defcommand scratch-pad () ()
+ "Create or destroy a new scratchpad group."
+ (if *scratchpad*
+ (progn
+ (gselect *scratchpad*)
+ (dolist (window (group-windows (current-group)))
+ (delete-window window))
+ (gkill)
+ (setf *scratchpad* nil)
+ (echo "nerfed scratchpad"))
+ (progn
+ (setf *scratchpad* (gnew "scratchpad"))
+ (echo "scratchpad created"))))
+
+(defvar *scratchpad-float* nil)
+(defcommand scratch-pad-float () ()
+ "Create or destroy a new floating scratchpad group."
+ (if *scratchpad-float*
+ (progn
+ (gselect *scratchpad-float*)
+ (dolist (window (group-windows (current-group)))
+ (delete-window window))
+ (gkill)
+ (setf *scratchpad-float* nil)
+ (echo "nerfed floating scratchpad"))
+ (progn
+ (setf *scratchpad-float* (gnew "scratchpad-float"))
+ (echo "floating scratchpad created"))))
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#565766
-;;; #565766UTILITY FUNCTIONS ;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#565766
-
(defcommand acpi-status () ()
- #627e95"Print ACPI status in the StumpWM message box."
+ "Print ACPI status in the StumpWM message box."
(stumpwm:echo-string (current-screen)
- (#93e57cwith-output-to-string (stream)
+ (with-output-to-string (stream)
(sb-ext:run-program
- #627e95"/usr/bin/acpitool"
+ (format nil "~A/acpitool" *exec-base*)
nil
- #a3646f:output stream))))
+ :output stream))))
+
+(defun stumpwm-run-program (program)
+ (sb-ext:run-program
+ (format nil "~A/~A" *exec-base* program) nil))
(defcommand lock () ()
- #627e95"Lock the screen by invoking i3lock."
- (stumpwm:echo-string (current-screen) #627e95"Locking screen...")
- (sb-ext:run-program #627e95"/usr/bin/i3lock" nil))
+ "Lock the screen by invoking xautolock."
+ (stumpwm:echo-string (current-screen) "Locking screen...")
+ (sb-ext:run-program
+ (format nil "~A/~A" *exec-base* "xautolock") "-locknow" nil))
-(#93e57cdefun #beb7f7exec-for-status (path #5992c2&rest args)
- #565766"Run the path with args and return the status code."
+(defun exec-for-status (path &rest args)
+ "Run the path with args and return the status code."
(sb-ext:process-exit-code
- (sb-ext:run-program path args #a3646f:wait t)))
+ (sb-ext:run-program path args :wait t)))
-(#93e57cdefun #beb7f7exec-ok (path #5992c2&rest args)
- #565766"Returns true if path with args ran without error."
+(defun exec-ok (path &rest args)
+ "Returns true if path with args ran without error."
(zerop (exec-for-status path args)))
-(#93e57cdefun #beb7f7daemon-is-running (daemon)
- (zerop (exec-for-status #627e95"/usr/bin/pgrep" daemon)))
+(defun daemon-is-running (daemon)
+ (zerop (exec-for-status "/usr/bin/pgrep" daemon)))
-(#93e57cdefun #beb7f7start-daemon-if-not-running (path #5992c2&rest args)
- #565766"If the program specified at path isn't running, start it."
- (#93e57cwhen (not (daemon-is-running (pathname-name path)))
- (run-shell-command (#93e57cif (null args)
+(defun start-daemon-if-not-running (path &rest args)
+ "If the program specified at path isn't running, start it."
+ (when (not (daemon-is-running (pathname-name path)))
+ (run-shell-command (if (null args)
path
- (format nil #627e95"~A~{ ~A~}" path args)))))
+ (format nil "~A~{ ~A~}" path args)))))
-(#93e57cdefun #beb7f7start-program-if-not-running (program #5992c2&rest args)
- (format t #627e95"WOULD RUN: nohup ~A~{ ~A~}" program args)
- (#93e57cwhen (not (exec-ok #627e95"/usr/bin/pgrep" program))
- (run-shell-command (format nil #627e95"nohup ~A~{ ~A~}"
+(defun start-program-if-not-running (program &rest args)
+ (format t "WOULD RUN: nohup ~A~{ ~A~}" program args)
+ (when (not (exec-ok "/usr/bin/pgrep" program))
+ (run-shell-command (format nil "nohup ~A~{ ~A~}"
program args))))
-(#93e57cdefun #beb7f7with-terminal (#5992c2&key (run #627e95"" run-p) (term *default-terminal*))
- (concat #627e95"exec " term (#93e57cif run-p #627e95" -e " #627e95"") run))
+(defun with-terminal (&key (run "" run-p) (term *default-terminal*))
+ (concat "exec " term (if run-p " -e " "") run))
-(#93e57cdefun #beb7f7with-homedir (path)
+(defun with-homedir (path)
(merge-pathnames path (user-homedir-pathname)))
-(#93e57cdefun #beb7f7in-homedir-p (path)
- (probe-file (#93e57cwith-homedir path)))
+(defun in-homedir-p (path)
+ (probe-file (with-homedir path)))
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#565766
-;;; #565766DEMON^WKEY BINDING ;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#565766
-
-(define-key stumpwm:*root-map* (kbd #627e95"B") #627e95"exec firefox")
-(define-key stumpwm:*root-map* (kbd #627e95"c") (#93e57cwith-terminal))
-(define-key *root-map* (kbd #627e95"b") #627e95"acpi-status")
-(define-key *root-map* (kbd #627e95"RET") (#93e57cwith-terminal))
-(define-key *root-map* (kbd #627e95"d") #627e95"exec dmenu_run")
-(define-key *root-map* (kbd #627e95"D") #627e95"exec i3-dmenu-desktop")
-(define-key *root-map* (kbd #627e95"e") #627e95"exec emacsclient -c -a \"\"")
-(define-key *root-map* (kbd #627e95"E") (#93e57cwith-terminal #a3646f:run #627e95"'emacsclient -c -nw -a \"\"'"))
-(define-key *root-map* (kbd #627e95"g") (#93e57cwith-terminal #a3646f:run #627e95"ghci"))
-(define-key *root-map* (kbd #627e95"C-i") (#93e57cwith-terminal #a3646f:run #627e95"ipython"))
-(define-key *root-map* (kbd #627e95"l") #627e95"lock")
-(define-key *root-map* (kbd #627e95"C-l") (#93e57cwith-terminal #a3646f:run #627e95"rlwrap sbcl"))
-(Purpledefine-key *root-map* (kbd VioletRed4"M") (Purplewith-terminal dark slate blue:run VioletRed4"htop"))
-(Purpledefine-key *root-map* (kbd VioletRed4"C-s") VioletRed4"swank")
-(Purpledefine-key *root-map* (kbd VioletRed4"C-v") VioletRed4"exec pavucontrol")
-(Purpledefine-key *root-map* (kbd VioletRed4"w") (Purplewith-terminal dark slate blue:run VioletRed4"nmtui-connect"))
-(Purpledefine-key *root-map* (kbd VioletRed4"`") VioletRed4"scratch-pad")
-(Purpledefine-key *root-map* (kbd VioletRed4"~") VioletRed4"scratch-pad-float")
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; DEMON^WKEY BINDING ;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Firebrick
-;;; FirebrickEXECUTION ;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Firebrick
-
-(run-shell-command VioletRed4"ssh-add")
+(define-key stumpwm:*root-map* (kbd "B") "exec firefox")
+(define-key stumpwm:*root-map* (kbd "c") (with-terminal))
+(define-key *root-map* (kbd "b") "acpi-status")
+(define-key *root-map* (kbd "RET") (with-terminal))
+(define-key *root-map* (kbd "d") "exec dmenu_run")
+(define-key *root-map* (kbd "D") "exec i3-dmenu-desktop")
+(define-key *root-map* (kbd "e") "exec emacsclient -c -a \"\"")
+(define-key *root-map* (kbd "E") (with-terminal :run "'emacsclient -c -nw -a \"\"'"))
+(define-key *root-map* (kbd "g") (with-terminal :run "ghci"))
+(define-key *root-map* (kbd "C-i") (with-terminal :run "ipython"))
+(define-key *root-map* (kbd "l") "exec i3lock")
+(define-key *root-map* (kbd "C-l") (with-terminal :run "rlwrap sbcl"))
+(define-key *root-map* (kbd "M") (with-terminal :run "htop"))
+(define-key *root-map* (kbd "C-s") "swank")
+(define-key *root-map* (kbd "C-v") "exec pavucontrol")
+(define-key *root-map* (kbd "w") (with-terminal :run "nmtui-connect"))
+(define-key *root-map* (kbd "`") "scratch-pad")
+(define-key *root-map* (kbd "~") "scratch-pad-float")
-(Purplewhen (in-homedir-p VioletRed4".fehbg")
- (sb-ext:run-program VioletRed4"/bin/sh" (Purplewith-homedir VioletRed4".fehbg")))
-(Purplewhen (in-homedir-p VioletRed4".screenlayouts/norminal.sh")
- (run-shell-command (Purplewith-homedir VioletRed4".screenlayouts/norminal.sh")))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; EXECUTION ;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Firebrick
-;;; FirebrickTHIS BATTLESTATION IS FULLY OPERATIONAL ;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Firebrick
-(message VioletRed4"Ready.")
+(run-shell-command "ssh-add")
-;;FirebrickLISP=sbcl
-
\ No newline at end of file
+(when (in-homedir-p ".fehbg")
+ (sb-ext:run-program "/bin/sh" (with-homedir ".fehbg")))
+(when (in-homedir-p ".screenlayouts/norminal.sh")
+ (run-shell-command (with-homedir ".screenlayouts/norminal.sh")))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; THIS BATTLESTATION IS FULLY OPERATIONAL ;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(message "Ready.")
+
+;;LISP=sbcl