From 2a4a8b3ddd5664198c5fbef8e98e55e86c3d35ed Mon Sep 17 00:00:00 2001 From: Kyle Isom Date: Wed, 12 Apr 2023 21:49:58 -0700 Subject: [PATCH] updating desktop setup --- inventory | 3 + roles/desktop/files/stumpwm-gnome.desktop | 11 + roles/desktop/files/sudoers | 55 +++ roles/desktop/tasks/main.yml | 26 ++ roles/development/tasks/main.yml | 3 +- roles/dotfiles/files/.stumpwmrc | 398 ++++++++++++---------- 6 files changed, 314 insertions(+), 182 deletions(-) create mode 100644 roles/desktop/files/stumpwm-gnome.desktop create mode 100644 roles/desktop/files/sudoers 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