Compare commits

..
219 Commits
Author SHA1 Message Date
AquaMorph c596064b44 Minecraft bindings 2021-04-24 10:59:47 -04:00
AquaMorph d562d87d0a Fixed GTK Icons 2021-04-19 13:13:09 -04:00
AquaMorph 5f8e1c7e7b Fixed emacs window moving 2021-04-16 12:57:50 -04:00
AquaMorph 55fd830007 Fixed Overwatch desktop 2021-04-14 18:11:15 -04:00
AquaMorph 169ffdc1e1 Fixed DaVinci Resolve installer 2021-04-02 16:12:17 -04:00
AquaMorph bee0f3a832 Removed sudo from package version checks 2021-03-20 14:20:13 -04:00
AquaMorph a413dff644 Fixed Overwatch i3wm setup 2021-02-27 10:42:00 -05:00
AquaMorph e40ff3bd9d Close i3wm window handler restart on Bitwig launch 2021-02-26 22:26:55 -05:00
AquaMorph ec7bb7394b Fixed DaVinci Resolve installer 2021-02-25 08:08:46 -05:00
AquaMorph 10e6311851 Fixed DaVinci Resolve installer going from beta to release 2021-02-25 07:33:12 -05:00
AquaMorph 6b4545b917 i3wm Bitwig start close window monitor service 2021-02-24 22:03:56 -05:00
AquaMorph 880052d80a Fixed Bitwig DSP window triggering automation 2021-02-21 17:16:25 -05:00
AquaMorph 4d98c61049 Synth power menu 2021-02-21 08:48:17 -05:00
AquaMorph 8bf1fbdbea Automatic DAW mode for Bitwig 2021-02-20 19:25:30 -05:00
AquaMorph 32b3e12943 Systemd setup install script 2021-02-20 16:38:54 -05:00
AquaMorph e2e6c46f98 Polybar systemd service 2021-02-20 12:07:02 -05:00
AquaMorph 90a1de1a10 ES-5 startup script works with program default install 2021-02-20 09:41:02 -05:00
AquaMorph 327f36cce4 Automatic ES-9 setup 2021-02-19 09:19:33 -05:00
AquaMorph ed2ab233cd Install program directories 2021-02-16 09:37:15 -05:00
AquaMorph 38aa9bbd1b Yabridge install script 2021-02-15 12:11:34 -05:00
AquaMorph f615d3e3db Terminal on computer startup 2021-02-12 21:37:46 -05:00
AquaMorph f2dfa528ee Added more video services 2021-02-12 21:36:27 -05:00
AquaMorph 560318dfa8 Cyberpunk 2077 keybindings 2021-02-12 20:59:15 -05:00
AquaMorph 65de29ca13 Fixed error with DaVinchi Resolve installer not being executable 2021-02-11 22:08:39 -05:00
AquaMorph f1fcf55f7f Fixed interface name 2021-02-09 21:10:39 -05:00
AquaMorph a0e32f6a38 Added more video platforms 2021-01-21 08:12:44 -05:00
AquaMorph 38d6f07ce6 Firefox starting with LBRY 2021-01-17 10:59:50 -05:00
AquaMorph edce94d03c Installed package searching 2021-01-12 15:35:28 -05:00
AquaMorph dcfc056cb0 Display correct monitors on startup 2020-12-28 13:28:46 -05:00
AquaMorph 410bf4d56a Remove unused flatpak runtimes 2020-12-18 09:31:52 -05:00
AquaMorph af8c799fd1 Fixed Reaper installer 2020-12-03 09:43:23 -05:00
AquaMorph 4b53929cc2 Forking manual updates 2020-12-01 09:09:48 -05:00
AquaMorph 83510a125b DaVinci Resolve beta installs 2020-11-30 22:18:31 -05:00
AquaMorph ee8d5dbce9 Added device toggling 2020-11-26 16:28:35 -05:00
AquaMorph 80946e9761 Fixed Bitwig installer for new version 2020-11-26 12:25:55 -05:00
AquaMorph 7e0337f8a6 Davinci Resolve beta updates 2020-11-19 11:52:53 -05:00
AquaMorph 04d8aa767f Script to convert CR3 to DNG RAW 2020-11-07 17:28:55 -05:00
AquaMorph f21f0bd89f Python package dependencies 2020-10-29 10:13:30 -04:00
AquaMorph fa93d2fe9d Basic synth power CLI 2020-10-25 20:26:28 -04:00
AquaMorph 4b2e9e63b9 Synth power controls 2020-10-25 16:56:06 -04:00
AquaMorph bc4e37a398 Home Assistant post requests 2020-10-25 14:27:51 -04:00
AquaMorph 89ecb534e0 Completed get methods for Home Assistant 2020-10-25 12:42:27 -04:00
AquaMorph b33f2586b8 Basic Home Assistant wrapper 2020-10-24 21:31:16 -04:00
AquaMorph 4b91be7b57 Battery percentage 2020-10-24 11:56:28 -04:00
AquaMorph 1056b9292a Basic CLI arguments for mixer 2020-10-14 21:32:03 -04:00
AquaMorph 580f77bb11 Refactored audio scripts to new directory 2020-10-11 10:38:42 -04:00
AquaMorph d28568ee03 Audio interface mixing scripts 2020-10-10 21:16:33 -04:00
AquaMorph 87054f8ca1 Fixed update check for DaVinci Resolve betas 2020-10-09 20:01:48 -04:00
AquaMorph f0d5f70ea5 Keeweb password manager install script 2020-10-07 18:26:41 -04:00
AquaMorph 8ab9980bbf Fixed Dragonframe installer 2020-10-05 09:41:54 -04:00
AquaMorph b8c9693326 Fixed Bitwig installer 2020-09-29 09:56:21 -04:00
AquaMorph 1f44801edb Move Firefox windows to proper workspaces 2020-09-24 20:46:15 -04:00
AquaMorph 650d747791 Desktop start up with additional Firefox windows 2020-09-18 08:40:44 -04:00
AquaMorph d77e129b2c Two Point Hospital escape binding 2020-09-18 08:39:52 -04:00
AquaMorph e0a5ae73d6 Two Point Hospital bindings 2020-08-29 12:27:20 -04:00
AquaMorph ce56dd2d85 Fix package selection for Resolve installer 2020-08-27 10:04:37 -04:00
AquaMorph 29df83e3d4 Downloaders use package download function 2020-08-25 08:21:33 -04:00
AquaMorph 7e6645704a Fixed Dragonframe check 2020-08-24 20:03:38 -04:00
AquaMorph f5d9c6d2c5 Resolve automatic install 2020-08-24 16:13:45 -04:00
AquaMorph 39efa6380f Alacritty config support for newest version 2020-08-23 19:49:53 -04:00
AquaMorph 53890288ba Automatic install of Reaper 2020-08-23 13:21:48 -04:00
AquaMorph a9c4699dae Reaper version check 2020-08-23 10:13:40 -04:00
AquaMorph 4bc38eadc4 OSS program update script 2020-08-22 16:33:44 -04:00
AquaMorph e77fb9a73c Renamed installer and setup scripts 2020-08-22 09:20:24 -04:00
AquaMorph 6f6cc537cf ES-9 stop and renaming 2020-08-16 18:22:01 -04:00
AquaMorph 21bb1fb091 Improved DSP load 2020-08-16 17:29:59 -04:00
AquaMorph d51d8d18c1 Switch character buttons 2020-08-09 09:22:44 -04:00
AquaMorph 35c27924e2 Portal bindings 2020-08-08 10:05:55 -04:00
AquaMorph 914534eb93 Added escape key to Fall Guys config 2020-08-08 10:05:25 -04:00
AquaMorph c7b65101f7 Fall Guys binding 2020-08-07 16:28:40 -04:00
AquaMorph 93aedd616d Fixed audio startup 2020-07-28 19:08:53 -04:00
AquaMorph 2990cfe9b7 Simplify3D profile for CR-10s 2020-07-23 21:46:27 -04:00
AquaMorph 723dd4ac07 Daisy build enviroment 2020-07-11 22:08:17 -04:00
AquaMorph e7354ec232 Prioritized drun 2020-07-07 10:50:50 -04:00
AquaMorph f93e7739ba i3wm for window generator and Planet Coaster bindings 2020-07-05 19:24:22 -04:00
AquaMorph dd1b7376c1 Bindings for Planet Coaster 2020-07-05 16:25:25 -04:00
AquaMorph 8196c71d93 Improved gaps 2020-07-05 09:06:12 -04:00
AquaMorph 49b49fc7bb Thickened borders 2020-07-04 08:19:41 -04:00
AquaMorph dbe74db2c2 Icons for rofi 2020-07-03 13:21:08 -04:00
AquaMorph 99d0355813 Flatpak updating 2020-06-30 12:44:22 -04:00
AquaMorph 43170cf447 FPV Drone configs 2020-06-18 21:56:28 -04:00
AquaMorph 782ace88f3 Audio startup functions 2020-05-31 11:31:46 -04:00
AquaMorph d672031ad0 Smarter audio startup 2020-05-30 13:20:47 -04:00
AquaMorph 1bb6e3e9ac Update alias 2020-05-29 08:38:13 -04:00
AquaMorph f1310e517b Polybar less transparent 2020-05-25 09:53:55 -04:00
AquaMorph 012e18fb98 Two more iterations on audio startup 2020-05-25 09:53:01 -04:00
AquaMorph e165e24847 Mov file conversion 2020-05-25 09:52:06 -04:00
AquaMorph f86a577d26 Convert capitalized mp4 files 2020-05-14 17:08:55 -04:00
AquaMorph 1f9a810ea9 Fixed trackpad disable 2020-04-27 09:25:46 -04:00
AquaMorph 90c0d3b038 Doom Eternal bindings 2020-04-18 14:13:05 -04:00
AquaMorph c4e62f6db9 Toggle run level 2020-04-04 09:43:41 -04:00
AquaMorph dee02d73d9 Removed deprecated alacritty settings 2020-04-01 08:49:37 -04:00
AquaMorph d89807b8d6 Weapon switching for DOOM 2020-03-16 10:59:29 -04:00
AquaMorph 62b432be1d DOOM profile loads when game starts 2020-03-14 18:51:20 -04:00
AquaMorph 3b02692c15 Doom G13 bindings 2020-03-13 21:45:40 -04:00
AquaMorph 2a6adc46d1 Event key passed as CLI argument and use live project 2020-02-14 15:49:38 -05:00
AquaMorph 4968769ba7 Robot photo based on match schedules 2020-02-12 16:13:36 -05:00
AquaMorph a6d30fd86a Creates basic photo checklist 2020-02-11 15:24:10 -05:00
AquaMorph a94b14769a Began framework for FRC photo checklist 2020-02-10 16:21:08 -05:00
AquaMorph 21c0e69d86 Icons for polybar 2020-01-26 15:40:56 -05:00
AquaMorph 58c0118724 Support for ES-9 2020-01-18 20:07:25 -05:00
AquaMorph 580740dbd0 Resolve add to end of timeline shortcut 2020-01-14 19:24:57 -05:00
AquaMorph 33f82c4ad4 Convert audio of video files for Resolve 2020-01-13 20:10:26 -05:00
AquaMorph 0432c3ac6d Fixed script to run from any directory 2020-01-12 18:33:31 -05:00
AquaMorph 165ac2849c Restored Resolve gaps 2020-01-11 19:25:13 -05:00
AquaMorph ea06e7aed2 Audio fix 2020-01-05 21:03:06 -05:00
AquaMorph cb7e2d9cd4 Changed polybar to blue 2020-01-03 19:11:02 -05:00
AquaMorph b2e7930ef9 Audio start pulseaudio properly 2020-01-02 09:10:09 -05:00
AquaMorph 3bee06e3d7 Improved workspace formatting 2020-01-02 09:09:07 -05:00
AquaMorph 1d3e87d431 Bitwig desktop 2020-01-01 09:01:57 -05:00
AquaMorph 8a63dcd897 Removed audio hack 2019-12-31 09:06:19 -05:00
AquaMorph 9b3ab03ea3 Skip sound start program launching flag 2019-12-30 12:24:17 -05:00
AquaMorph 827b6c406b Moved installers to use library 2019-12-30 06:48:46 -05:00
AquaMorph 5714ea26cc Dragonframe installer 2019-12-29 15:12:42 -05:00
AquaMorph f167b0f12e Audio startup fixes 2019-12-29 14:33:51 -05:00
AquaMorph 39d30cd76a Reaper desktop 2019-12-28 20:24:54 -05:00
AquaMorph 585ba6e330 Git add alias 2019-12-27 22:14:52 -05:00
AquaMorph 9e39f2b2a0 Basic Reaper install script 2019-12-26 21:01:31 -05:00
AquaMorph cfa7421c0d Bitwig installer fix for crashing on startup 2019-12-25 20:37:32 -05:00
AquaMorph 012454a147 Bitwig install script 2019-12-25 20:30:40 -05:00
AquaMorph 3905df13d9 Config file generation 2019-12-25 15:16:55 -05:00
AquaMorph 0204e53cc2 Load settings 2019-12-25 12:47:30 -05:00
AquaMorph bf5e905388 Startx for laptop 2019-12-25 12:42:38 -05:00
AquaMorph be7f897dd7 Update setup on startup 2019-12-24 21:50:09 -05:00
AquaMorph 9ed5790415 Dotfiles alias 2019-12-24 21:49:26 -05:00
AquaMorph bfd5d054c2 Removed old install system 2019-12-24 12:20:33 -05:00
AquaMorph ed6dfe22b8 New Resolve desktop 2019-12-24 11:25:09 -05:00
AquaMorph 754a568335 Rofi spacing 2019-12-23 19:14:52 -05:00
AquaMorph 3b1afd08ec Self updating 2019-12-23 19:09:21 -05:00
AquaMorph c0ae64ccfb Install script uses functions 2019-12-23 17:58:31 -05:00
AquaMorph 8550832516 Install directions 2019-12-23 15:10:56 -05:00
AquaMorph b46d9d080b Working install script 2019-12-23 14:42:49 -05:00
AquaMorph d0a24b844c Root skipping flag 2019-12-23 13:56:04 -05:00
AquaMorph 2362602ed5 Cleaned formatting 2019-12-23 11:28:37 -05:00
AquaMorph 3d6fac2664 Linking directories 2019-12-23 10:50:44 -05:00
AquaMorph 46b4a3f945 Moving dotfiles to independent directory 2019-12-22 21:59:22 -05:00
AquaMorph 329aa603df Changed i3 program launcher 2019-12-14 14:55:17 -05:00
AquaMorph cd17afb1a1 Switched to Rofi 2019-12-14 14:54:37 -05:00
AquaMorph f6d509d5cc Moved interface startup to new script 2019-12-14 08:37:44 -05:00
AquaMorph fa98be2c0c Added screenshot keybindings 2019-12-14 08:37:07 -05:00
AquaMorph faa84f07c4 Improved opacity settings 2019-12-14 08:35:25 -05:00
AquaMorph f28aa3d4d2 ES-8 dynamic startup script 2019-11-16 11:36:22 -05:00
AquaMorph 01d37f6b90 Screenshot shortcut 2019-11-12 20:30:50 -05:00
AquaMorph ebcacb7bc2 Made i3 colors variables, bitwig opening and gaps shortcuts 2019-10-14 19:37:49 -04:00
AquaMorph 70361efc50 Moved i3 settings from desktop to shared 2019-10-12 15:42:09 -04:00
AquaMorph 048cddfd3e Removed duplicate i3 config 2019-10-02 21:12:35 -04:00
AquaMorph 623ae43ead Added a readme 2019-09-26 18:39:28 -04:00
AquaMorph ed0cb9e483 Git pull alias 2019-09-25 19:50:50 -04:00
AquaMorph 376e0d1303 Removed duplicate files 2019-09-25 17:52:24 -04:00
AquaMorph 975cf91c1c Capslock made to be super key 2019-09-23 21:52:02 -04:00
AquaMorph 9bfe1ab53c Skip backing up symbolic links 2019-09-23 21:33:38 -04:00
AquaMorph 5f4927b3e0 Dotfiles setup 2019-09-22 21:34:07 -04:00
AquaMorph 1828f1a99b Process fork 2019-09-21 22:07:53 -04:00
AquaMorph 14e51ee50a Set desktop wallpaper 2019-09-20 21:43:54 -04:00
AquaMorph c77cfe7a52 Moved i3 config script 2019-09-18 19:39:53 -04:00
AquaMorph 3e26cc0141 Moved i3 scripts 2019-09-18 19:30:24 -04:00
AquaMorph e0bf2a9a54 i3 cycle workspaces 2019-09-18 16:49:32 -04:00
AquaMorph aee072c7bf Gaps and gaps theming 2019-09-18 14:26:40 -04:00
AquaMorph 826eb66876 Fixed monitor fallback 2019-09-18 11:03:51 -04:00
AquaMorph ebd43ad461 Laptop i3 config 2019-09-17 21:30:18 -04:00
AquaMorph dff22f381e Git alias 2019-09-17 21:27:44 -04:00
AquaMorph fac4a81bef Fixed emacs from terminal 2019-09-17 20:50:55 -04:00
AquaMorph 18c61b64fa Better support for the laptop 2019-09-16 20:50:09 -04:00
AquaMorph 97d703070a Mouse thumb gestures move windows around 2019-09-15 19:03:50 -04:00
AquaMorph 39659417e1 Moved polybar monitor to third screen 2019-09-11 20:39:47 -04:00
AquaMorph 6f45dbc0f6 Swtich desktops with mouse buttons 2019-09-11 20:33:24 -04:00
AquaMorph ebf268e0ea Gave more used screens more virtual desktops 2019-09-10 19:14:36 -04:00
AquaMorph 9e6448c6ae Dotfiles install and backup script 2019-09-04 16:19:59 -04:00
AquaMorph 63a9f7a787 Install and backup script for hosts 2019-09-04 13:14:50 -04:00
AquaMorph b864018a7b Hosts blocking 2019-09-04 13:12:08 -04:00
AquaMorph df42eb1140 Firefox added to sound startup 2019-09-01 08:40:06 -04:00
AquaMorph 6d6049ad69 Changed font for dmenu 2019-09-01 08:36:27 -04:00
AquaMorph 383d9dc6eb Overwatch and DaVinci Resolve startup setup 2019-08-31 11:29:13 -04:00
AquaMorph d9e0917110 Removed gtk decorations 2019-08-30 21:20:12 -04:00
AquaMorph e9ef53bd5a Changed studio name 2019-08-30 20:26:17 -04:00
AquaMorph a63569a800 More resolve shortcuts 2019-08-30 20:25:24 -04:00
AquaMorph 77cd405956 GTK theme 2019-08-27 08:13:50 -04:00
AquaMorph 8b2661e4fa DaVinci Resolve keyboard shortcuts 2019-08-24 16:56:41 -04:00
AquaMorph d328f8aa90 Resolve g13 config 2019-08-24 12:16:39 -04:00
AquaMorph 28d3eccb66 Changed NAS name 2019-08-21 20:48:46 -04:00
AquaMorph 694e2abc6c Changed font 2019-08-21 20:48:19 -04:00
AquaMorph f42f59f80a Startup ES-8 interface 2019-07-31 09:50:59 -04:00
AquaMorph 723c164bb1 Faster audio startup 2019-07-28 12:46:26 -04:00
AquaMorph 7ac78a5b58 Start up system audio script 2019-07-28 11:59:19 -04:00
AquaMorph 34cea0c7c8 Connecting to NAS 2019-07-21 16:30:30 -04:00
AquaMorph 4c031c7dec File explorer for videos 2019-07-14 16:12:06 -04:00
AquaMorph 45f1e5420f Alacritty config 2019-07-13 21:44:04 -04:00
AquaMorph d42c2fcb96 File explorer shortcut 2019-07-13 21:41:23 -04:00
AquaMorph b57a941535 Impoved G13 profile menu 2019-06-22 15:40:20 -04:00
AquaMorph 99743600db Added script for Logitech G13 2019-06-21 21:14:27 -04:00
AquaMorph 1fe307a689 Removed monitor hack 2019-06-21 20:10:28 -04:00
AquaMorph 4ee7a5aea7 Added startup programs for desktop 2019-06-20 21:38:01 -04:00
AquaMorph bf7e1fb223 Monitor hack 2019-06-19 15:22:13 -04:00
AquaMorph bbe3dafed0 Created configurable i3wm config builder 2019-06-16 21:11:56 -04:00
AquaMorph 3edfb5af32 Initial support for desktop 2019-06-16 15:10:50 -04:00
AquaMorph 704ba13af2 Android Studio opens on set workspace 2018-10-10 20:56:17 -04:00
AquaMorph c41a70ee19 Auto start Firefox 2018-10-10 20:03:59 -04:00
AquaMorph 45ff1e0fef Added wifi to bar 2018-08-29 20:51:03 -04:00
AquaMorph 3bda2424ac Added backlight indicator 2018-08-29 11:13:02 -04:00
AquaMorph 434c2ea90c Added battery indicator 2018-08-29 10:58:53 -04:00
AquaMorph 26f0a146ae Improved formatting of battery 2018-08-28 21:46:45 -04:00
AquaMorph 86d4b1fdfe Added battery percentage 2018-08-28 21:39:01 -04:00
AquaMorph b3671721a2 Moved to polybar 2018-08-28 21:19:28 -04:00
AquaMorph ffee17ecc1 Fixed mouse spining on startup 2018-08-25 20:06:18 -04:00
AquaMorph 22831ca8f1 Added TrackPad disable toggle 2018-08-25 17:45:50 -04:00
AquaMorph 2420127c75 Made font slighty larger for desktop 2018-08-25 14:53:20 -04:00
AquaMorph 7f3cde64d5 Fixed volume display for i3status 2018-08-25 14:47:41 -04:00
AquaMorph e8fcd6d537 Added kitty config 2018-08-23 22:11:38 -04:00
AquaMorph d0457209f9 Fixed conflict 2018-07-31 18:40:24 -04:00
AquaMorph 28ab8e28ad Improved theming 2018-07-31 18:32:51 -04:00
AquaMorph 1c42ec4cab Added lock screen shortcut 2018-07-31 13:52:54 -04:00
AquaMorph cbf3df385c Added minor adjustments to window resize 2018-07-27 17:58:21 -04:00
AquaMorph 9fb3285e1f Changed close window command 2018-07-25 22:01:22 -04:00
AquaMorph a56363da9e Cleaned config 2018-07-25 21:58:51 -04:00
AquaMorph 2530a7fb41 Added volume percentage 2018-07-25 20:09:35 -04:00
AquaMorph cee19832d9 Improved battery design 2018-07-25 20:00:14 -04:00
AquaMorph a796a862d8 Cleaned useless statuses 2018-07-25 19:35:55 -04:00
AquaMorph 4e1af90a3a Changed battery percentage to relative to last full charge
Switched clock to 12 hours and seperated date
2018-07-25 18:43:10 -04:00
AquaMorph 72b8fdf26d Initial commit 2018-07-25 18:11:43 -04:00
189 changed files with 67084 additions and 7971 deletions
-8
View File
@@ -1,8 +0,0 @@
Commits
## Commit Message Format
Follow conventional commits style (all lowercase).
- `feat(scope): description` - New feature
- `fix(scope): description` - Bug fix
- `refactor(scope): description` - Code refactoring
- `docs(scope): description` - Documentation changes
- Example: `feat(zsh): update dotfiles` or `fix(scripts): use correct pass entry`
-1
View File
@@ -1 +0,0 @@
home
+60484
View File
File diff suppressed because it is too large Load Diff
+142
View File
@@ -0,0 +1,142 @@
i3/config
settings.conf
systemd/user/*/*
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
+10
View File
@@ -0,0 +1,10 @@
sh ~/.config/scripts/setup.sh -nr
# Load user settings from config file.
. ~/.config/settings.conf
if [[ $computer == 'w530' ]]; then
if [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then
exec startx
fi
fi
+35
View File
@@ -0,0 +1,35 @@
HISTFILE=~/.zsh_history
HISTSIZE=99999999
SAVEHIST=99999999
setopt appendhistory autocd extendedglob nomatch notify
unsetopt beep
bindkey -e
zstyle :compinstall filename '~/.zshrc'
autoload -Uz compinit
compinit
# Text Editor
alias emacs='emacs -nw'
alias e='emacs -nw'
# Other
alias i='sudo dnf install'
alias d='sudo dnf'
alias u='sh ~/.config/scripts/update.sh'
alias dot='cd ~/dotfiles'
# Git
alias c='git commit -m'
alias a='git add'
alias ga='git add -A'
alias gu='git add -u'
alias s='git status'
alias g='git'
alias p='git pull'
alias gp='git push'
export TERM=xterm
# Daisy build toolkit
GCC_PATH=~/dev/gcc-arm-none-eabi-9-2020-q2-update/bin
export PATH=$GCC_PATH:$PATH
-139
View File
@@ -1,139 +0,0 @@
# AGENTS.md - Coding Guidelines for Agentic Operations
This repository is a personal dotfiles collection managed with [chezmoi](https://www.chezmoi.io). It contains configuration files, shell scripts, and Python utilities for system management.
## Build, Lint & Test Commands
### Running Scripts
- **Shell scripts**: `bash ./home/bin/executable_<script_name>.sh` or run directly if executable
- **Python scripts**: `python3 ./home/bin/<script_name>.py`
- **Install dependencies**: `pip install -r requirements.txt`
### Testing
No formal test framework is present. Validation is done by:
- Running scripts manually with test inputs
- Checking for runtime errors (e.g., `python3 -m py_compile <file>` for syntax)
- Verifying command outputs match expected behavior
### Single Test/Script Execution
```bash
# Run a single Python script
python3 ./home/bin/i3-mouse.py
# Run a single shell script
bash ./home/bin/executable_update.sh
# Check Python syntax without running
python3 -m py_compile ./home/bin/homeassistant.py
```
## Code Style Guidelines
### Python
#### Imports
- Use standard library imports first, then third-party imports, then local imports
- Import order: `os`, `sys`, `time` → `requests`, `i3ipc`, `pyautogui` → local modules
- Each import on its own line (avoid `import x, y, z`)
- Example:
```python
#!/usr/bin/env python3
import os
import sys
import datetime
from requests import get, post
import json
```
#### Naming Conventions
- **Functions**: `snake_case` (e.g., `getPoints()`, `pointsToDirection()`)
- **Classes**: `PascalCase` (e.g., `HomeAssistant`, `Direction`)
- **Constants**: `UPPER_SNAKE_CASE`
- **Private members**: prefix with underscore `_privateVar`
- Enums use `PascalCase` for class and `UPPER_SNAKE_CASE` for members
#### Formatting
- Use 4-space indentation (not tabs)
- Line length: Keep to reasonable length (~80-100 chars) where practical
- Shebang for executable scripts: `#!/usr/bin/env python3`
- Blank lines: 2 between top-level definitions, 1 between method definitions
#### Types & Documentation
- No type hints required (not present in codebase)
- Add docstring comments for classes and non-obvious functions
- Comment format: `# description` (no colons at end unless explaining)
- Example: `# Enum for mouse direction`
#### Error Handling
- Use `raise` for exceptions in API wrappers (e.g., `response.raise_for_status()`)
- Return `None` for optional/conditional operations
- Handle command availability checks: `if command -v <cmd> &> /dev/null`
### Shell Scripts
#### Shebang & Headers
- Start with: `#!/bin/bash`
- Add brief comment: `# Script purpose description`
#### Formatting
- Use 2-space indentation
- Quote variables: `"${variable}"` or `"$variable"`
- Use `function name { ... }` syntax for functions
#### Naming & Structure
- Function names: `snake_case`
- Variables: lowercase with underscores for clarity
- Check for command availability before use:
```bash
if command -v <cmd> &> /dev/null; then
<cmd> <args>
fi
```
#### Error Handling
- Use `set -e` to exit on error when appropriate
- Check command exit status: `if <command>; then ... fi`
- Redirect stderr appropriately: `2>/dev/null` or `2>&1`
#### chezmoi Templates
- Dotfiles use chezmoi's templating system
- Template syntax: `{{ }}` for variables (Chezmoi specific)
- File naming: `dot_` prefix for dotfiles (e.g., `dot_zshrc`)
- Executable scripts: `executable_` prefix
#### Comments
- Use `#` for all config file comments
- Keep comments concise and descriptive
## Repository Patterns
### Commit Message Format
- Before generating a commit, always consult @.agents/COMMITS.md for the required style.
#### Pushing Remotes
- **Do not push git repositories to remote unless explicitly instructed.**
### File Organization
- Shell scripts: `home/bin/executable_<name>.sh`
- Python scripts: `home/bin/<name>.py`
- Config files: `home/dot_config/<app>/` (following XDG spec)
- Dependencies: List in `requirements.txt`
## Key Dependencies
- **configparser** - Config file parsing
- **todoist-python** - Todoist API
- **tbapy** - TBA API for robotics
- **holidays** - Holiday detection
- **i3ipc** - i3 window manager control
- **pyautogui** - Mouse control
- **requests** - HTTP library
- **dateutil** - Date utilities
## Development Notes
- This is a personal configuration repository, not a library
- Scripts are system-level utilities and automation scripts
- No CI/CD pipeline present (manual validation)
- Target OS: Linux (Ubuntu/Fedora compatible)
- Python version: Python 3.x minimum
+16 -89
View File
@@ -1,99 +1,26 @@
# Dotfiles # Dotfiles
A collection of config files and scripts for Fedora GNU/Linux and macOS. A collection of config files and scripts for Fedora GNU/Linux.
## Linux installation ## Install
```bash Run the following command to install
chezmoi init --apply git@github.com:AquaMorph/dotfiles.git
```sh
cd ~ && git clone git@github.com:AquaMorph/dotfiles.git && sh ~/dotfiles/scripts/setup.sh
```
Install the needed Python packages
```sh
pip install -r requirements.txt
``` ```
## macOS installation ## Scripts
1. Install the Xcode Command Line Tools with `xcode-select --install`, then ### frc-photo-checklist.py
install [Homebrew](https://brew.sh/) and follow its `brew shellenv`
instructions.
2. Download the dotfiles without applying them, then install dependencies: Python script to generate a Todoist checklist for taking photos at an FRC event.
```bash ```sh
brew install chezmoi python frc-photo-checklist.py [Event Key]
chezmoi init git@github.com:AquaMorph/dotfiles.git
brew bundle --file="$(chezmoi source-path ~/.brewfile)"
```
3. Restore your password store to `~/.password-store` and import its GPG private
key from a secure backup before applying the dotfiles:
```bash
gpg --import /path/to/private-key-backup.asc
```
If the store is kept in Git, clone it to `~/.password-store` using your
password-store repository URL. Verify that all required secrets can be
decrypted without printing their values:
```bash
pass show self-host/token/audible-activation-bytes >/dev/null
pass show self-host/token/aquaai >/dev/null
pass show self-host/token/todoist >/dev/null
```
`settings.conf` is rendered using `pass`, so applying it requires these
entries and the matching private key. Never commit keys or plaintext tokens.
4. Review and apply the dotfiles, then open a new terminal:
```bash
chezmoi diff
chezmoi apply
```
Linux-only configuration and scripts are automatically ignored on macOS.
To install newly added macOS dependencies later:
```bash
brew bundle --file="$(chezmoi source-path ~/.brewfile)"
```
### System preferences
Close System Settings, then review and run the optional setup script as your
normal user (not with `sudo`):
```bash
~/bin/setup-macos.sh --dry-run
~/bin/setup-macos.sh
```
It enables dark mode and Dock auto-hide, disables natural scrolling and
swipe-to-navigate, and removes window-tiling margins (macOS Sequoia and later).
Animation settings and machine-specific state, such as Dock contents and
monitor/Spaces layouts, are left unchanged.
The script is safe to rerun but does not back up previous values or run
automatically during `chezmoi apply`. Log out and back in if changes are not
visible.
### Hover window focus
AutoRaise focuses and raises windows on hover. Its settings are managed in
`~/.config/AutoRaise/config`.
After installing dependencies and applying the dotfiles, enable it at login:
```bash
brew services start dimentium/autoraise/autoraise
```
Grant AutoRaise access in **System Settings → Privacy & Security → Accessibility**.
If it is not listed, use **+**, press **Cmd+Shift+G**, and enter the path printed by
`echo "$(brew --prefix autoraise)/bin/AutoRaise"`. Then restart it with
`brew services restart dimentium/autoraise/autoraise`.
Hold **Control** to temporarily suspend hover focus. To turn it off entirely:
```bash
brew services stop dimentium/autoraise/autoraise
``` ```
+626
View File
@@ -0,0 +1,626 @@
# Configuration for Alacritty, the GPU enhanced terminal emulator.
# Any items in the `env` entry below will be added as
# environment variables. Some entries may override variables
# set by alacritty itself.
#env:
# TERM variable
#
# This value is used to set the `$TERM` environment variable for
# each instance of Alacritty. If it is not present, alacritty will
# check the local terminfo database and use `alacritty` if it is
# available, otherwise `xterm-256color` is used.
#TERM: xterm-256color
window:
# Window dimensions (changes require restart)
#
# Specified in number of columns/lines, not pixels.
# If both are `0`, this setting is ignored.
dimensions:
columns: 0
lines: 0
# Window position (changes require restart)
#
# Specified in number of pixels.
# If the position is not set, the window manager will handle the placement.
#position:
# x: 0
# y: 0
# Window padding (changes require restart)
#
# Blank space added around the window in pixels. This padding is scaled
# by DPI and the specified value is always added at both opposing sides.
padding:
x: 4
y: 4
# Spread additional padding evenly around the terminal content.
dynamic_padding: false
# Window decorations
#
# Values for `decorations`:
# - full: Borders and title bar
# - none: Neither borders nor title bar
#
# Values for `decorations` (macOS only):
# - transparent: Title bar, transparent background and title bar buttons
# - buttonless: Title bar, transparent background, but no title bar buttons
decorations: full
# Startup Mode (changes require restart)
#
# Values for `startup_mode`:
# - Windowed
# - Maximized
# - Fullscreen
#
# Values for `startup_mode` (macOS only):
# - SimpleFullscreen
startup_mode: Windowed
# Window title
#title: Alacritty
# Window class (Linux only):
#class: Alacritty
scrolling:
# Maximum number of lines in the scrollback buffer.
# Specifying '0' will disable scrolling.
history: 10000
# Number of lines the viewport will move for every line scrolled when
# scrollback is enabled (history > 0).
multiplier: 3
# Faux Scrolling
#
# The `faux_multiplier` setting controls the number of lines the terminal
# should scroll when the alternate screen buffer is active. This is used
# to allow mouse scrolling for applications like `man`.
#
# Specifying `0` will disable faux scrolling.
multiplier: 3
# Font configuration (changes require restart)
font:
# Normal (roman) font face
normal:
# Font family
#
# Default:
# - (macOS) Menlo
# - (Linux) monospace
# - (Windows) Consolas
family: Inconsolata
# The `style` can be specified to pick a specific face.
style: Monospace #Medium #Regular
# Bold font face
#bold:
# Font family
#
# If the bold family is not specified, it will fall back to the
# value specified for the normal font.
#family: monospace
# The `style` can be specified to pick a specific face.
#style: Bold
# Italic font face
#italic:
# Font family
#
# If the italic family is not specified, it will fall back to the
# value specified for the normal font.
#family: monospace
# The `style` can be specified to pick a specific face.
#style: Italic
# Point size
size: 14.0
# Offset is the extra space around each character. `offset.y` can be thought of
# as modifying the line spacing, and `offset.x` as modifying the letter spacing.
offset:
x: 0
y: 0
# Glyph offset determines the locations of the glyphs within their cells with
# the default being at the bottom. Increasing `x` moves the glyph to the right,
# increasing `y` moves the glyph upwards.
glyph_offset:
x: 0
y: 0
# Thin stroke font rendering (macOS only)
#
# Thin strokes are suitable for retina displays, but for non-retina screens
# it is recommended to set `use_thin_strokes` to `false`
#
# macOS >= 10.14.x:
#
# If the font quality on non-retina display looks bad then set
# `use_thin_strokes` to `true` and enable font smoothing by running the
# following command:
# `defaults write -g CGFontRenderingFontSmoothingDisabled -bool NO`
#
# This is a global setting and will require a log out or restart to take
# effect.
use_thin_strokes: true
# If `true`, bold text is drawn using the bright color variants.
draw_bold_text_with_bright_colors: true
# Colors (Tomorrow Night Bright)
colors:
# Default colors
primary:
background: '0x000000'
foreground: '0x0288d1'
# Bright and dim foreground colors
#
# The dimmed foreground color is calculated automatically if it is not present.
# If the bright foreground color is not set, or `draw_bold_text_with_bright_colors`
# is `false`, the normal foreground color will be used.
#dim_foreground: '0x9a9a9a'
#bright_foreground: '0xffffff'
# Cursor colors
#
# Colors which should be used to draw the terminal cursor. If these are unset,
# the cursor color will be the inverse of the cell color.
#cursor:
# text: '0x000000'
# cursor: '0xffffff'
# Selection colors
#
# Colors which should be used to draw the selection area. If selection
# background is unset, selection color will be the inverse of the cell colors.
# If only text is unset the cell text color will remain the same.
#selection:
# text: '0xeaeaea'
# background: '0x404040'
# Normal colors
normal:
black: '0x000000'
red: '0xd54e53'
green: '0xb9ca4a'
yellow: '0xe6c547'
blue: '0x7aa6da'
magenta: '0xc397d8'
cyan: '0x70c0ba'
white: '0xeaeaea'
# Bright colors
bright:
black: '0x666666'
red: '0xff3334'
green: '0x9ec400'
yellow: '0xe7c547'
blue: '0x7aa6da'
magenta: '0xb77ee0'
cyan: '0x54ced6'
white: '0xffffff'
# Dim colors
#
# If the dim colors are not set, they will be calculated automatically based
# on the `normal` colors.
#dim:
# black: '0x000000'
# red: '0x8c3336'
# green: '0x7a8530'
# yellow: '0x97822e'
# blue: '0x506d8f'
# magenta: '0x80638e'
# cyan: '0x497e7a'
# white: '0x9a9a9a'
# Indexed Colors
#
# The indexed colors include all colors from 16 to 256.
# When these are not set, they're filled with sensible defaults.
#
# Example:
# `- { index: 16, color: '0xff00ff' }`
#
indexed_colors: []
# Visual Bell
#
# Any time the BEL code is received, Alacritty "rings" the visual bell. Once
# rung, the terminal background will be set to white and transition back to the
# default background color. You can control the rate of this transition by
# setting the `duration` property (represented in milliseconds). You can also
# configure the transition function by setting the `animation` property.
#
# Values for `animation`:
# - Ease
# - EaseOut
# - EaseOutSine
# - EaseOutQuad
# - EaseOutCubic
# - EaseOutQuart
# - EaseOutQuint
# - EaseOutExpo
# - EaseOutCirc
# - Linear
#
# Specifying a `duration` of `0` will disable the visual bell.
bell:
animation: EaseOutExpo
duration: 0
color: '0xffffff'
# Background opacity
#
# Window opacity as a floating point number from `0.0` to `1.0`.
# The value `0.0` is completely transparent and `1.0` is opaque.
background_opacity: 0.8
# Mouse bindings
#
# Available fields:
# - mouse
# - action
# - mods (optional)
#
# Values for `mouse`:
# - Middle
# - Left
# - Right
# - Numeric identifier such as `5`
#
# All available `mods` and `action` values are documented in the key binding
# section.
mouse_bindings:
- { mouse: Middle, action: PasteSelection }
mouse:
# Click settings
#
# The `double_click` and `triple_click` settings control the time
# alacritty should wait for accepting multiple clicks as one double
# or triple click.
double_click: { threshold: 300 }
triple_click: { threshold: 300 }
# If this is `true`, the cursor is temporarily hidden when typing.
hide_when_typing: false
url:
# URL launcher
#
# This program is executed when clicking on a text which is recognized as a URL.
# The URL is always added to the command as the last parameter.
#
# When set to `None`, URL launching will be disabled completely.
#
# Default:
# - (macOS) open
# - (Linux) xdg-open
# - (Windows) explorer
#launcher:
# program: xdg-open
# args: []
# URL modifiers
#
# These are the modifiers that need to be held down for opening URLs when clicking
# on them. The available modifiers are documented in the key binding section.
modifiers: None
selection:
semantic_escape_chars: ",│`|:\"' ()[]{}<>"
# When set to `true`, selected text will be copied to the primary clipboard.
save_to_clipboard: false
# Allow terminal applications to change Alacritty's window title.
window.dynamic_title: true
cursor:
# Cursor style
#
# Values for `style`:
# - ▇ Block
# - _ Underline
# - | Beam
style: Block
# If this is `true`, the cursor will be rendered as a hollow box when the
# window is not focused.
unfocused_hollow: true
# Live config reload (changes require restart)
live_config_reload: true
# Shell
#
# You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`.
# Entries in `shell.args` are passed unmodified as arguments to the shell.
#
# Default:
# - (Linux/macOS) /bin/bash --login
# - (Windows) powershell
#shell:
# program: /bin/bash
# args:
# - --login
# Startup directory
#
# Directory the shell is started in. If this is unset, or `None`, the working
# directory of the parent process will be used.
working_directory: None
# Windows 10 ConPTY backend (Windows only)
#
# This will enable better color support and may resolve other issues,
# however this API and its implementation is still young and so is
# disabled by default, as stability may not be as good as the winpty
# backend.
#
# Alacritty will fall back to the WinPTY automatically if the ConPTY
# backend cannot be initialized.
enable_experimental_conpty_backend: false
# Send ESC (\x1b) before characters when alt is pressed.
alt_send_esc: true
debug:
# Display the time it takes to redraw each frame.
render_timer: false
# Keep the log file after quitting Alacritty.
persistent_logging: false
# Log level
#
# Values for `log_level`:
# - None
# - Error
# - Warn
# - Info
# - Debug
# - Trace
log_level: Warn
# Print all received window events.
print_events: false
# Record all characters and escape sequences as test data.
ref_test: false
# Key bindings
#
# Key bindings are specified as a list of objects. Each binding will specify a
# key and modifiers required to trigger it, terminal modes where the binding is
# applicable, and what should be done when the key binding fires. It can either
# send a byte sequence to the running application (`chars`), execute a
# predefined action (`action`) or fork and execute a specified command plus
# arguments (`command`).
#
# Bindings are always filled by default, but will be replaced when a new binding
# with the same triggers is defined. To unset a default binding, it can be
# mapped to the `None` action.
#
# Example:
# `- { key: V, mods: Control|Shift, action: Paste }`
#
# Available fields:
# - key
# - mods (optional)
# - chars | action | command (exactly one required)
# - mode (optional)
#
# Values for `key`:
# - `A` -> `Z`
# - `F1` -> `F12`
# - `Key1` -> `Key0`
#
# A full list with available key codes can be found here:
# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants
#
# Instead of using the name of the keys, the `key` field also supports using
# the scancode of the desired key. Scancodes have to be specified as a
# decimal number.
# This command will allow you to display the hex scancodes for certain keys:
# `showkey --scancodes`
#
# Values for `mods`:
# - Command
# - Control
# - Option
# - Super
# - Shift
# - Alt
#
# Multiple `mods` can be combined using `|` like this: `mods: Control|Shift`.
# Whitespace and capitalization is relevant and must match the example.
#
# Values for `chars`:
# The `chars` field writes the specified string to the terminal. This makes
# it possible to pass escape sequences.
# To find escape codes for bindings like `PageUp` ("\x1b[5~"), you can run
# the command `showkey -a` outside of tmux.
# Note that applications use terminfo to map escape sequences back to
# keys. It is therefore required to update the terminfo when
# changing an escape sequence.
#
# Values for `action`:
# - Paste
# - PasteSelection
# - Copy
# - IncreaseFontSize
# - DecreaseFontSize
# - ResetFontSize
# - ScrollPageUp
# - ScrollPageDown
# - ScrollLineUp
# - ScrollLineDown
# - ScrollToTop
# - ScrollToBottom
# - ClearHistory
# - Hide
# - Quit
# - ClearLogNotice
# - SpawnNewInstance
# - ToggleFullscreen
# - None
#
# Values for `action` (macOS only):
# - ToggleSimpleFullscreen: Enters fullscreen without occupying another space
#
# Values for `command`:
# The `command` field must be a map containing a `program` string and
# an `args` array of command line parameter strings.
#
# Example:
# `command: { program: "alacritty", args: ["-e", "vttest"] }`
#
# Values for `mode`:
# - ~AppCursor
# - AppCursor
# - ~AppKeypad
# - AppKeypad
key_bindings:
# (Windows/Linux only)
#- { key: V, mods: Control|Shift, action: Paste }
#- { key: C, mods: Control|Shift, action: Copy }
#- { key: Insert, mods: Shift, action: PasteSelection }
#- { key: Key0, mods: Control, action: ResetFontSize }
#- { key: Equals, mods: Control, action: IncreaseFontSize }
#- { key: Add, mods: Control, action: IncreaseFontSize }
#- { key: Subtract, mods: Control, action: DecreaseFontSize }
#- { key: Minus, mods: Control, action: DecreaseFontSize }
# (macOS only)
#- { key: Key0, mods: Command, action: ResetFontSize }
#- { key: Equals, mods: Command, action: IncreaseFontSize }
#- { key: Add, mods: Command, action: IncreaseFontSize }
#- { key: Minus, mods: Command, action: DecreaseFontSize }
#- { key: K, mods: Command, action: ClearHistory }
#- { key: K, mods: Command, chars: "\x0c" }
#- { key: V, mods: Command, action: Paste }
#- { key: C, mods: Command, action: Copy }
#- { key: H, mods: Command, action: Hide }
#- { key: Q, mods: Command, action: Quit }
#- { key: W, mods: Command, action: Quit }
- { key: Paste, action: Paste }
- { key: Copy, action: Copy }
- { key: L, mods: Control, action: ClearLogNotice }
- { key: L, mods: Control, chars: "\x0c" }
- { key: Home, mods: Alt, chars: "\x1b[1;3H" }
- { key: Home, chars: "\x1bOH", mode: AppCursor }
- { key: Home, chars: "\x1b[H", mode: ~AppCursor }
- { key: End, mods: Alt, chars: "\x1b[1;3F" }
- { key: End, chars: "\x1bOF", mode: AppCursor }
- { key: End, chars: "\x1b[F", mode: ~AppCursor }
- { key: PageUp, mods: Shift, action: ScrollPageUp, mode: ~Alt }
- { key: PageUp, mods: Shift, chars: "\x1b[5;2~", mode: Alt }
- { key: PageUp, mods: Control, chars: "\x1b[5;5~" }
- { key: PageUp, mods: Alt, chars: "\x1b[5;3~" }
- { key: PageUp, chars: "\x1b[5~" }
- { key: PageDown, mods: Shift, action: ScrollPageDown, mode: ~Alt }
- { key: PageDown, mods: Shift, chars: "\x1b[6;2~", mode: Alt }
- { key: PageDown, mods: Control, chars: "\x1b[6;5~" }
- { key: PageDown, mods: Alt, chars: "\x1b[6;3~" }
- { key: PageDown, chars: "\x1b[6~" }
- { key: Tab, mods: Shift, chars: "\x1b[Z" }
- { key: Back, chars: "\x7f" }
- { key: Back, mods: Alt, chars: "\x1b\x7f" }
- { key: Insert, chars: "\x1b[2~" }
- { key: Delete, chars: "\x1b[3~" }
- { key: Left, mods: Shift, chars: "\x1b[1;2D" }
- { key: Left, mods: Control, chars: "\x1b[1;5D" }
- { key: Left, mods: Alt, chars: "\x1b[1;3D" }
- { key: Left, chars: "\x1b[D", mode: ~AppCursor }
- { key: Left, chars: "\x1bOD", mode: AppCursor }
- { key: Right, mods: Shift, chars: "\x1b[1;2C" }
- { key: Right, mods: Control, chars: "\x1b[1;5C" }
- { key: Right, mods: Alt, chars: "\x1b[1;3C" }
- { key: Right, chars: "\x1b[C", mode: ~AppCursor }
- { key: Right, chars: "\x1bOC", mode: AppCursor }
- { key: Up, mods: Shift, chars: "\x1b[1;2A" }
- { key: Up, mods: Control, chars: "\x1b[1;5A" }
- { key: Up, mods: Alt, chars: "\x1b[1;3A" }
- { key: Up, chars: "\x1b[A", mode: ~AppCursor }
- { key: Up, chars: "\x1bOA", mode: AppCursor }
- { key: Down, mods: Shift, chars: "\x1b[1;2B" }
- { key: Down, mods: Control, chars: "\x1b[1;5B" }
- { key: Down, mods: Alt, chars: "\x1b[1;3B" }
- { key: Down, chars: "\x1b[B", mode: ~AppCursor }
- { key: Down, chars: "\x1bOB", mode: AppCursor }
- { key: F1, chars: "\x1bOP" }
- { key: F2, chars: "\x1bOQ" }
- { key: F3, chars: "\x1bOR" }
- { key: F4, chars: "\x1bOS" }
- { key: F5, chars: "\x1b[15~" }
- { key: F6, chars: "\x1b[17~" }
- { key: F7, chars: "\x1b[18~" }
- { key: F8, chars: "\x1b[19~" }
- { key: F9, chars: "\x1b[20~" }
- { key: F10, chars: "\x1b[21~" }
- { key: F11, chars: "\x1b[23~" }
- { key: F12, chars: "\x1b[24~" }
- { key: F1, mods: Shift, chars: "\x1b[1;2P" }
- { key: F2, mods: Shift, chars: "\x1b[1;2Q" }
- { key: F3, mods: Shift, chars: "\x1b[1;2R" }
- { key: F4, mods: Shift, chars: "\x1b[1;2S" }
- { key: F5, mods: Shift, chars: "\x1b[15;2~" }
- { key: F6, mods: Shift, chars: "\x1b[17;2~" }
- { key: F7, mods: Shift, chars: "\x1b[18;2~" }
- { key: F8, mods: Shift, chars: "\x1b[19;2~" }
- { key: F9, mods: Shift, chars: "\x1b[20;2~" }
- { key: F10, mods: Shift, chars: "\x1b[21;2~" }
- { key: F11, mods: Shift, chars: "\x1b[23;2~" }
- { key: F12, mods: Shift, chars: "\x1b[24;2~" }
- { key: F1, mods: Control, chars: "\x1b[1;5P" }
- { key: F2, mods: Control, chars: "\x1b[1;5Q" }
- { key: F3, mods: Control, chars: "\x1b[1;5R" }
- { key: F4, mods: Control, chars: "\x1b[1;5S" }
- { key: F5, mods: Control, chars: "\x1b[15;5~" }
- { key: F6, mods: Control, chars: "\x1b[17;5~" }
- { key: F7, mods: Control, chars: "\x1b[18;5~" }
- { key: F8, mods: Control, chars: "\x1b[19;5~" }
- { key: F9, mods: Control, chars: "\x1b[20;5~" }
- { key: F10, mods: Control, chars: "\x1b[21;5~" }
- { key: F11, mods: Control, chars: "\x1b[23;5~" }
- { key: F12, mods: Control, chars: "\x1b[24;5~" }
- { key: F1, mods: Alt, chars: "\x1b[1;6P" }
- { key: F2, mods: Alt, chars: "\x1b[1;6Q" }
- { key: F3, mods: Alt, chars: "\x1b[1;6R" }
- { key: F4, mods: Alt, chars: "\x1b[1;6S" }
- { key: F5, mods: Alt, chars: "\x1b[15;6~" }
- { key: F6, mods: Alt, chars: "\x1b[17;6~" }
- { key: F7, mods: Alt, chars: "\x1b[18;6~" }
- { key: F8, mods: Alt, chars: "\x1b[19;6~" }
- { key: F9, mods: Alt, chars: "\x1b[20;6~" }
- { key: F10, mods: Alt, chars: "\x1b[21;6~" }
- { key: F11, mods: Alt, chars: "\x1b[23;6~" }
- { key: F12, mods: Alt, chars: "\x1b[24;6~" }
- { key: F1, mods: Super, chars: "\x1b[1;3P" }
- { key: F2, mods: Super, chars: "\x1b[1;3Q" }
- { key: F3, mods: Super, chars: "\x1b[1;3R" }
- { key: F4, mods: Super, chars: "\x1b[1;3S" }
- { key: F5, mods: Super, chars: "\x1b[15;3~" }
- { key: F6, mods: Super, chars: "\x1b[17;3~" }
- { key: F7, mods: Super, chars: "\x1b[18;3~" }
- { key: F8, mods: Super, chars: "\x1b[19;3~" }
- { key: F9, mods: Super, chars: "\x1b[20;3~" }
- { key: F10, mods: Super, chars: "\x1b[21;3~" }
- { key: F11, mods: Super, chars: "\x1b[23;3~" }
- { key: F12, mods: Super, chars: "\x1b[24;3~" }
- { key: NumpadEnter, chars: "\n" }
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -12,11 +12,10 @@ bind G11 KEY_S
bind G12 KEY_D bind G12 KEY_D
# Other # Other
bind G3 KEY_Q
bind G5 KEY_E bind G5 KEY_E
bind G1 KEY_ESC bind G1 KEY_ESC
bind G22 KEY_SPACE bind G22 KEY_SPACE
bind G15 KEY_LEFTSHIFT bing G15 KEY_LEFTSHIFT
bind LEFT KEY_TAB bind LEFT KEY_TAB
rgb 128 255 31 rgb 128 255 31
@@ -1,6 +1,6 @@
[Settings] [Settings]
#gtk-icon-theme-name=Flat-Remix-Blue-Dark gtk-icon-theme-name=Flat-Remix-Blue-Dark
#gtk-theme-name=Flat-Remix-GTK-Blue-Darkest-Solid gtk-theme-name=Flat-Remix-GTK-Blue-Darkest-Solid
gtk-font-name=SF Pro Display 14 gtk-font-name=SF Pro Display 14
gtk-application-prefer-dark-theme=1 gtk-application-prefer-dark-theme=1
gtk-decoration-layout=0 gtk-decoration-layout=0
@@ -1,6 +1,6 @@
[Settings] [Settings]
#gtk-icon-theme-name=Flat-Remix-Blue-Dark gtk-icon-theme-name=Flat-Remix-Blue-Dark
#gtk-theme-name=Flat-Remix-GTK-Blue-Darkest-Solid gtk-theme-name=Flat-Remix-GTK-Blue-Darkest-Solid
gtk-font-name=SF Pro Display 14 gtk-font-name=SF Pro Display 14
gtk-application-prefer-dark-theme=1 gtk-application-prefer-dark-theme=1
gtk-decoration-layout=0 gtk-decoration-layout=0
-4
View File
@@ -1,4 +0,0 @@
encryption = "gpg"
[gpg]
recipient = "02C20A131365D6EF3CC4A023B9BDD0975CF5592D"
-61
View File
@@ -1,61 +0,0 @@
{{ if eq .chezmoi.os "darwin" -}}
# Linux desktop configuration
.config/g13
.config/gtk-3.0
.config/gtk-4.0
.config/hypr
.config/i3
.config/mako
.config/polybar
.config/quickshell
.config/rofi
.config/waybar
# Linux services and PipeWire configuration
.config/systemd
.config/wireplumber
.local/share/wireplumber
user/*.service
# Linux package installers and desktop startup scripts
bin/installers
bin/desktop
bin/system
bin/i3-mouse.py
bin/i3wm-config-gen.sh
bin/i3wm-for-window-gen.sh
bin/launch-stocks-tracker.py
bin/start-firefox.py
bin/start-brave.sh
# Linux hardware, screen locking, and NAS mounting
bin/get-mouse-battery.sh
bin/lock.sh
bin/toggle-graphics.sh
bin/trackpad-toggle.sh
bin/connect-nas.sh
# ALSA/PipeWire routing and Rofi prompts; keep portable audio utilities
bin/audio/audio-lib.sh
bin/audio/aquamix.sh
bin/audio/es8start.sh
bin/audio/es9start.sh
bin/audio/es9stop.sh
bin/audio/system-start-audio.sh
bin/audio/synth-power-prompt.sh
# Wine-based Adobe DNG conversion with GNU date
bin/video/cr3todng.sh
{{ else -}}
# Homebrew dependencies are only managed on macOS.
.brewfile
# macOS OrcaSlicer uses a symlink to the shared Linux-style profile directory.
Library/Application Support/OrcaSlicer
{{ end -}}
{{ if ne .chezmoi.os "darwin" -}}
.config/karabiner
.config/AutoRaise
bin/setup-macos.sh
{{ end -}}
-1
View File
@@ -1 +0,0 @@
AquaAI/glm-4.7-flash
@@ -1 +0,0 @@
openai/gpt-5.6-luna
@@ -1 +0,0 @@
AquaAI
@@ -1,7 +0,0 @@
Be as concise as possible.
Be extremely accurate.
Recommend things I would not realize I would benefit from.
Call out my misconceptions and tell me when I am wrong.
For personal matters {{ template "prompts/agent-name" . }} is encouraging but brutally honest.
Never sycophantic.
Do not use em dashes. If an em dash would normally appear, use a comma for continuing thoughts or a period if it should be a separate sentence.
-1
View File
@@ -1 +0,0 @@
You are an AI assistant named {{ template "prompts/agent-name" . }}.
@@ -1 +0,0 @@
{{ .chezmoi.homeDir }}/.config/OrcaSlicer/user/default
-31
View File
@@ -1,31 +0,0 @@
# Scripts
## AquaAI
AquaAI is bash script that interacts with OpenAI and Ollama APIs to enable terminal based interaction with LLMs.
## connect-nas.sh
Connect to long storage NAS.
## convert-mp4-to-resolve.sh
Converts mp4 video files to a video format where the audio works with the linux version of Davinci Resolve.
## frc-photo-checklist.py
Python script to generate a Todoist checklist for taking photos at an FRC event.
```sh
python frc-photo-checklist.py [Event Key]
```
## get-mouse-battery.sh
Prints out the battery percentage of a mouse and if it is charging.
## openai-usage.sh
Shows the remaining 5-hour and weekly ChatGPT Codex allowances using the current
OpenCode or Codex CLI login. Run `openai-usage --watch` to refresh every minute,
or `openai-usage --json` for machine-readable output.
-11
View File
@@ -1,11 +0,0 @@
#! /bin/bash
# Load user settings from config file.
. ~/.config/settings.conf
for file in *.aax; do
convertedFile="./${file%%.*}.m4b"
if [ ! -f "$convertedFile" ]; then
ffmpeg -y -activation_bytes ${activation_bytes} -i ./${file} -codec copy $convertedFile
fi
done
-17
View File
@@ -1,17 +0,0 @@
#!/bin/bash
# Script to add another audio interface if available.
# Import library
source $(dirname $(realpath ${BASH_SOURCE[0]}))/audio-lib.sh
DEVICE_NAME='ES-9'
DEVICE_NUM=$(getCardNumber $DEVICE_NAME)
checkCard $DEVICE_NAME $DEVICE_NUM
# Start up ES-5
pkill es-5-pipewire || true
/opt/es-5-pipewire/es-5-pipewire >/dev/null 2>/dev/null &
sleep 0.1
jack_connect ES-5:output "$DEVICE_NAME:playback_SL" || true
jack_connect ES-5:output "$DEVICE_NAME:playback_AUX6" || true
@@ -1,68 +0,0 @@
#! /bin/bash
# Kill Pulse.
function killPulse() {
systemctl --user stop pulseaudio.socket
systemctl --user stop pulseaudio.service
pulseaudio -k
killall pulseaudio
}
# Start Pulseaudio properly.
function fixPulse() {
PULSE="$(alsamixer 2>&1 | killall alsamixer)"
if [[ $PULSE == *'Connection refused'* ]]; then
echo 'Fixing Pulseaudio'
killPulse
sleep 0.1
pulseaudio -D
fixPulse
else
echo 'Pulseaudio is working correctly'
fi
}
# Set up sinks.
function setupSinks() {
pactl set-default-sink speakers
pactl set-default-source sm7b
}
# Connect sinks to audio interface
function connectSinks() {
pw-link speakers:monitor_FL alsa_output.usb-Focusrite_Clarett__8Pre_00002325-00.pro-output-0:playback_AUX0
pw-link speakers:monitor_FR alsa_output.usb-Focusrite_Clarett__8Pre_00002325-00.pro-output-0:playback_AUX1
pw-link alsa_input.usb-Focusrite_Clarett__8Pre_00002325-00.pro-input-0:capture_AUX3 sm7b:input_FL
pw-link alsa_input.usb-Focusrite_Clarett__8Pre_00002325-00.pro-input-0:capture_AUX3 sm7b:input_FR
return $?
}
function renameInterface() {
for n in `seq 0 17` ; do
jack_property -p -s "alsa:pcm:2:hw:2,0:capture:capture_${n}" http://jackaudio.org/metadata/pretty-name "capture_$((n+1))"
done
for n in `seq 0 19` ; do
jack_property -p -s "alsa:pcm:2:hw:2,0:playback:playback_${n}" http://jackaudio.org/metadata/pretty-name "playback_$((n+1))"
done
for n in `seq 0 19` ; do
jack_property -p -s "alsa:pcm:2:hw:2,0:playback:monitor_${n}" http://jackaudio.org/metadata/pretty-name "monitor_$((n+1))"
done
}
# Restart the Wireplumber service.
function restartWireplumber() {
systemctl --user stop wireplumber
sleep 5
systemctl --user restart wireplumber
}
# Wire sinks
setupSinks
# Eurorack audio interface
sh ~/bin/audio/es9start.sh
systemctl --user restart polybar
sleep 5
restartWireplumber
@@ -1,23 +0,0 @@
#!/bin/bash
# Start the systemd-managed Quickshell bar in the current graphical session.
if ! command -v qs &> /dev/null; then
if [ "${XDG_SESSION_TYPE}" = "x11" ]; then
~/bin/desktop/polybar-start.sh
fi
exit 0
fi
if [ "${XDG_SESSION_TYPE}" = "x11" ]; then
systemctl --user unset-environment WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE
systemctl --user set-environment QT_QPA_PLATFORM=xcb
else
systemctl --user set-environment QT_QPA_PLATFORM=wayland
fi
systemctl --user import-environment DISPLAY XAUTHORITY WAYLAND_DISPLAY XDG_SESSION_TYPE XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE I3SOCK
if [ "$(hostname)" = "desktop" ]; then
systemctl --user set-environment QUICKSHELL_BAR_SCREEN=DP-2
else
systemctl --user unset-environment QUICKSHELL_BAR_SCREEN
fi
systemctl --user restart quickshell-bar.service
@@ -1,7 +0,0 @@
#!/bin/bash
# Stop all waybar instances
killall -q waybar
while pgrep -x waybar >/dev/null; do sleep 0.1; done
waybar &
-929
View File
@@ -1,929 +0,0 @@
#!/usr/bin/env bash
# This is a bash script to enable interacting with LLMs via the command line.
#===============================================================================
## Modes
### Default mode
# Default mode uses the default prompt and model for AquaAI. It's nothing
# special.
### Bash mode
# This mode will help with writing bash scripts.
### CLI mode
# CLI mode prompts the AI with system information and will return terminal
# commands. If you wish to run the command simply type run and it will end the
# chat and run the command. You are responsible for validating what the command
# does before running.
### Code Review mode
# This will ask you what changes to look at and will provide a code review of
# the changes. This mode only works if you are currently in a git repo. It can
# look at the past few commits as well as changes that have yet to be committed.
### Reasoning mode
# This uses the best available reasoning model with the default prompt.
# Reasoning models take a task and break them up to subtask to pass to
# specialized models. They are very yappy and take a while to run. Can be good
# for complex tasks.
### Regex mode
# This mode will respond only with regex.
### Git mode
# This mode will respond only with git commands. If you wish to run the command
# simply type run and it will end the chat and run the command. You are
# responsible for validating what the command does before running.
## Special Input
### Edit
# You can type `edit` or `e` as a response and it will open your editor set with
# the EDITOR variable in your shell session. You can then type your query and
# save and exit. From there the program will send your query to the AI.
### Exit
# You can type `exit` or `q` to end the chat. Personally, I never do this just
# use C-c.
### Run
# If you are in cli mode you can type `run` or `r` and the script will run the
# given commands on your system. You are playing with fire with this, but fire
# is useful and fun just be careful.
### Save
# You can type `save` or `s` as a response and the chat history will be saved
# for use at another time. This will also end the chat. Chats are stored in
# `~/.local/share/aquaai`
## Adding custom modes
# There are two variables that need to be set to create a custom mode.
### $selected_model will set the model to be used for the chat.
### $system_prompt will be the prompt that controls how the AI behaves.
# introduce more noise into text generation leading to more out there responses.
#
# Defaults are set for all these but to define a custom mode you should override
# at least one of these in a function. Add a custom flag in the switch statement
# at the bottom of this file and call the function there. See `--bash` as an
# example of how to do this. From there add some documentation to the
# print_help() function and then here.
#===============================================================================
# User configurable variables.
#
# The following are settings that can be overwritten by environment variables.
# You can set these in your .bashrc to have them set each time you open a new
# shell. This script is designed not to be modified so updates can be applied by
# replacing the file with the newest version.
#
#
# Set the url of the ollama server.
#
# export AQUAAI_OLLAMA_URL='192.168.1.156:11434'
#
ollama_url=${AQUAAI_OLLAMA_URL:='https://ai.aquamorph.com/api'}
#
# Set the default model.
#
# export AQUAAI_DEFAULT_MODEL='qwen2.5-7b-instruct'
#
default_model=${AQUAAI_DEFAULT_MODEL:='qwen2.5:32b-instruct'}
#
# Set the default coding model.
#
# export AQUAAI_CODING_MODEL='qwen2.5-7b-coder'
#
coding_model=${AQUAAI_CODING_MODEL:='qwen2.5-32b-coder'}
#
# In multiline mode, users can input multiple lines of text by pressing the
# Enter key. The message will be sent when the user presses C-d on the keyboard.
#
# export AQUAAI_MULTILINE_MODE=true
#
multiline_mode=${AQUAAI_MULTILINE_MODE:=false}
#
# Enable rich formatting for text output. A formatting program is required for
# this see below.
#
# export AQUAAI_RICH_FORMAT_MODE=true
#
rich_format_mode=${AQUAAI_RICH_FORMAT_MODE:=false}
#
# Path to the program used for rich formatting. I am currently using streamdown
# but you are free to use something different as long as it supports streaming
# text and markdown. Go to the GitHub repo to learn to install streamdown and
# configure: https://github.com/day50-dev/Streamdown
#
# export AQUAAI_RICH_FORMAT_PATH=~/.venv/bin/streamdown
#
rich_format_path=${AQUAAI_RICH_FORMAT_PATH:=streamdown}
#
# Ignore certificate checks.
#
# export AQUAAI_INSECURE_MODE=true
#
insecure_mode=${AQUAAI_INSECURE_MODE:=false}
#
# Use OpenAI api design instead of Ollama.
#
# export AQUAAI_OPENAI_API:=true
#
openai_api=${AQUAAI_OPENAI_API:=true}
#
# Set key used to authenticate with the API.
#
# export AQUAAI_KEY:=true
#
key=${AQUAAI_KEY:=''}
#===============================================================================
# Constants.
OLLAMA_URL=${ollama_url}
CURL_FLAGS=('-sN')
USER=$(whoami)
DATA_DIR="${HOME}/.local/share/aquaai"
RESPONSE_FIFO="${DATA_DIR}/.response"
AGENT_NAME='AquaAI'
# Colors.
CLEAR='\033[0m'
BLUE='\033[0;34m'
RED='\e[1;31m'
LIGHT_GRAY='\e[38;5;247m'
# Globals.
message_history="[]"
cli_mode=false
git_mode=false
code_review_start=false
selected_model=${default_model}
# Error Codes.
ERROR_NO_SAVEFILE=1
ERROR_INVALID_TEMP=2
ERROR_UNKNOWN_OPTION=3
ERROR_UNKNOWN_MODEL=4
ERROR_NO_GIT_REPO=5
ERROR_INVALID_INPUT=6
ERROR_NO_AUTOSAVE=7
ERROR_INVALID_SSL=8
ERROR_UNKNOWN_SSL=9
#===============================================================================
# Give the AI a name. It improves prompting to call it by name.
function name_agent() {
system_prompt="You are an AI assistant named ${AGENT_NAME}."
}
# Make the AI write and behave better.
function set_better_conversions() {
system_prompt+=' Be as concise as possible.'
system_prompt+=' Be extremely accurate.'
system_prompt+=' Recommend things I would not realize I would benefit from.'
system_prompt+=' Call out my misconceptions and tell me when I am wrong.'
system_prompt+=" For personal matters ${AGENT_NAME} is encouraging"
system_prompt+=' but brutally honest.'
system_prompt+=' Never sycophantic.'
system_prompt+=' Do not use em dashes. If an em dash would normally appear,'
system_prompt+=' use a comma for continuing thoughts or a period if it'
system_prompt+=' should be a separate sentence.'
}
# Set the formatting for all reponses.
function set_response_format() {
system_prompt+=' Do not wrap response in quotation marks or apostrophes.'
system_prompt+=' Do not use html to format response.'
}
# Limit format of output to just commands.
function format_for_cli() {
system_prompt+=" ${AGENT_NAME} does not put commands in quotation marks."
system_prompt+=" ${AGENT_NAME} does not put commands in markdown."
system_prompt+=" ${AGENT_NAME} only outputs terminal commands."
}
# Default prompt.
function set_default_agent() {
name_agent
system_prompt+=" ${AGENT_NAME} follows the users instructions carefully."
system_prompt+=" ${AGENT_NAME} responds using extended markdown."
set_better_conversions
set_response_format
}
# Set chat to help with command line questions.
function set_cli_agent() {
local os_version=$(cat /etc/os-release | grep 'PRETTY_NAME' | \
sed 's/PRETTY_NAME=//g' | tr -d '"')
name_agent
system_prompt+=" ${AGENT_NAME} assists users with ${os_version}."
format_for_cli
set_response_format
}
# Set chat to help with bash questions.
function set_bash_agent() {
name_agent
system_prompt+=" ${AGENT_NAME} assists users with POSIXs bash."
system_prompt+=' Format output for view in a command line.'
system_prompt+=' Do not put commands in quotation marks.'
system_prompt+=' Use double spaces and the function keyword.'
system_prompt+=' Write documentation before the function declaration.'
set_response_format
}
# Set ai to help with code reviews.
function set_code_review_agent() {
name_agent
system_prompt+=" ${AGENT_NAME} is a senior software engineer performing a"
system_prompt+=' code review for a colleague.'
system_prompt+=''
set_better_conversions
system_prompt+=' Show code snipets when helpful.'
system_prompt+="${AGENT_NAME}'s reports should have the following format:"
system_prompt+='# Typos'
system_prompt+='List of all typos you find.'
system_prompt+='# Formatting and Readability Issues'
system_prompt+='List of all formatting and readability issues you find.'
system_prompt+='# Security Issues'
system_prompt+='List of all security issues you find.'
system_prompt+='# Other'
system_prompt+='List of all other issues you find.'
set_response_format
}
# Set chat to help with git.
function set_git_agent() {
name_agent
system_prompt+=" ${AGENT_NAME} assists users with git."
format_for_cli
if is_git_repo; then
system_prompt+="\n\nHere is some information about the current git repo.\n"
local current_branch=$(git branch --show-current)
system_prompt+="Current branch: ${current_branch} \n"
local git_remotes=$(git remote -v)
system_prompt+="Remotes: ${git_remotes}\n"
fi
}
# Set chat to help with regex.
function set_regex_agent() {
name_agent
system_prompt+=" ${AGENT_NAME} assists users with regex."
system_prompt+=' Only output a single regex expression.'
system_prompt+=' Use BRE and ERE regex.'
format_for_cli
}
# Set chat to help with Home Assistant.
function set_home_assistant_agent() {
name_agent
system_prompt+=" ${AGENT_NAME} assists users with Home Assistant programming."
system_prompt+=" Templating is done with Jinja2."
}
#===============================================================================
# Get the first available model from a given list.
function get_model_from_list() {
local models=("$@")
for m in "${models[@]}"; do
check_if_model_exists $m true
if [ $? -eq 0 ]; then
echo "${m}"
return
fi
done
print_error "could not find any models on the list."
exit $ERROR_UNKNOWN_MODEL
}
function load_model_from_list() {
local models=("$@")
selected_model=$(get_model_from_list "${models[@]}")
if [[ $? -ne 0 ]]; then
print_error "could not find any models on the list."
exit $ERROR_UNKNOWN_MODEL
fi
}
# Set the default coding model.
function set_coding_model() {
local models=(${coding_model}
'qwen2.5-32b-coder'
'qwen2.5-7b-coder'
'llama3.3-70b-instruct'
'hf.co/Qwen/Qwen2.5-Coder-3B-Instruct-GGUF:Q4_K_M'
'hf.co/bartowski/Qwen2.5-Coder-1.5B-Instruct-GGUF:Q4_K_M'
'qwen2.5-coder:3b'
'qwen2.5-coder:0.5b'
)
load_model_from_list "${models[@]}"
}
# Set the default reasoning model.
function set_reasoning_model() {
local models=(${reasing_model}
'qwen3-32b'
'gpt-oss-120b'
)
load_model_from_list "${models[@]}"
}
#===============================================================================
# Print out help menu.
function print_help() {
echo 'Interact with the AquaAI via the command line.'
echo ''
echo '--delete - delete a chat from history'
echo '-l --list - list available models'
echo '--load - load a chat from history'
echo '--restore - load last auto saved chat'
echo ''
echo '--bash - help with bash'
echo '--cli - help with command line'
echo '--code-review - code review of a git project'
echo '-r --reason - help with a reasoning model'
echo '--regex - help with regex'
echo '--git - help with git'
}
# Print out error message.
function print_error() {
local msg=${1}
printf "${RED}ERROR: ${msg}\n${CLEAR}"
}
# Check if a given program is installed on the system.
function check_program() {
if ! command -v ${1} 2>&1 >/dev/null; then
print_error "${1} not found. Please install ${1}."
exit ${ERROR_DEPENDENCY}
fi
}
# Check system for required programs.
function check_requirements() {
check_program curl
check_program jq
check_program fzf
if [ "${rich_format_mode}" == true ]; then
check_program ${rich_format_path}
fi
}
# Get available models info.
function get_models() {
local model_path=''
if [ "${openai_api}" == true ]; then
model_path='/models'
else
model_path='/tags'
fi
curl "${CURL_FLAGS[@]}" "${OLLAMA_URL}${model_path}"
}
# Get a list of available models.
function get_models_list() {
local jq_filter=''
if [ "${openai_api}" == true ]; then
jq_filter='.data[].id'
else
jq_filter='.models[].model'
fi
get_models | jq -r ${jq_filter}
}
# Print list of models.
function print_models() {
get_models_list | column -t -s $'\t'
}
# Print message variable.
function print_message_history() {
echo ${message_history}
}
# Print message variable.
function print_debug() {
echo "Model: ${selected_model}"
echo 'System Prompt:'
print_system_prompt
echo 'Chat History:'
print_message_history | jq
}
# Print the system prompt.
function print_system_prompt() {
echo -e "${system_prompt}"
}
# Check if the model exists.
function check_if_model_exists() {
local model=${1}
local enable_rc=${2}
local model_list=($(get_models_list))
for m in "${model_list[@]}"; do
if [[ "$m" == "$model" ]]; then
return 0
fi
done
if [ ${enable_rc} ]; then
return 1
else
print_error "model ${model} does not exists."
exit $ERROR_UNKNOWN_MODEL
fi
}
# Convert string to a safe format for later use.
function convert_to_safe_text() {
echo "${1}" | jq -sR @json
}
# Set the text output color for user input.
function set_user_color() {
printf "${LIGHT_GRAY}"
}
# Set the text output color for ai response.
function set_ai_color() {
printf "${CLEAR}"
}
# Set text color to defaults.
function set_clear_color() {
printf "${CLEAR}"
}
# Print the header for the ai message
function print_ai_start_message() {
echo -e "\U1F916 AquaAI"
}
# Print the header for the ai message
function print_user_start_message() {
echo -e "\U1F464 ${USER}"
}
# Opens the user's preferred text editor to allow them to input text.
function editor_input() {
local editor=${EDITOR:=nano}
local temp_file=$(mktemp)
${editor} ${temp_file}
local user_input=$(<"$temp_file")
rm "$temp_file"
msg=${user_input}
}
# Check if current directory is managed by git.
function is_git_repo() {
git rev-parse --is-inside-work-tree &> /dev/null
}
# Check if current directory is managed by git.
function check_git_directory() {
if ! git rev-parse --is-inside-work-tree &> /dev/null; then
print_error 'The current directory is not inside a git repository.'
exit ${ERROR_NO_GIT_REPO}
fi
}
# Asks the user if they want to include staged git change data.
function gather_staged_changes() {
echo -n 'Do you want to include staged changes? (y/n)? '
read response
if [[ "$response" == 'y' || "$response" == 'yes' ]]; then
msg+=$(git diff --cached --patch)
fi
}
# Ask the user if they want to include changes that have not been committed.
function gather_uncommitted_changes() {
echo -n 'Do you want to include the changes'
echo -n ' you have yet to commit or stash (y/n)? '
read response
if [[ "$response" == 'y' || "$response" == 'yes' ]]; then
changes=$(git diff)
msg+=${changes}
fi
}
# Ask the user for number of commit changes to include in code review.
# Returns a list of changes for the given number of commits.
function gather_commit_changes() {
echo -n 'How many previous commits do you want to include? '
local count
read count
# Allow hitting enter as a no response.
if [ -z "$count" ]; then
return
fi
# Validate that the input is a positive integer.
if ! [[ "$count" =~ ^[0-9]+$ ]] || [ "$count" -lt 0 ]; then
print_error 'Please enter a positive integer for the number of commits.'
exit ${ERROR_INVALID_INPUT}
fi
hashes=$(git log --format=%H -n ${count})
for h in ${hashes}; do
commit_message=$(git show ${h})
msg+="${commit_message}"$'\n'
done
}
# Create fifo for chat responses.
function create_response_fifo() {
create_data_dir
if [ ! -p ${RESPONSE_FIFO} ]; then
mkfifo ${RESPONSE_FIFO}
fi
}
# Delete fifo for chat responses.
function remove_response_fifo() {
if [ -p ${RESPONSE_FIFO} ]; then
rm ${RESPONSE_FIFO}
fi
}
# Create response trap to allow user to stop AquaAI.
function create_response_trap() {
trap 'echo "AquaAI has been interrupted...";' SIGINT
}
# Remove response trap to allow user to exit program.
function remove_response_trap() {
trap - SIGINT
}
# Get the first message from a saved chat.
function get_first_chat() {
local file_path=${1}
source <(cat ${file_path} | grep message_history)
message_history=$(echo $message_history | \
jq -r '[.[] | select(.role == "user")][0].content' \
2>/dev/null | sed 's/^"//')
echo -e $message_history | sed 's/"$//' | tr -d '\n' | cut -c 1-80 \
| sed ':a;N;$!ba;s/\n//g'
}
# Get an array of all saved chat files.
function get_save_files() {
save_files=()
create_data_dir
for f in $(find "$DATA_DIR" -type f -name "*.chat"); do
save_files+=("${f}")
done
}
# Create the data directory if it does not exist.
function create_data_dir() {
if [ ! -d "$DATA_DIR" ]; then
mkdir -p "$DATA_DIR"
fi
}
# Save the current chat to a file.
function save_chat() {
create_data_dir
local filename=${1}
if [ -z "$filename" ]; then
print_error 'No filename provided.'
exit ${ERROR_NO_SAVEFILE}
fi
declare -p selected_model system_prompt \
message_history cli_mode > "${DATA_DIR}/${filename}"
}
# Save the current chat to autosave.
function autosave() {
save_chat 'autosave.chat'
echo 'Chat has been auto saved'
}
# Find all .chat files in DATA_DIR and use fzf to select one.
function select_chat_file() {
selected_file=$(select_chat_with_fzf)
if [ -z "$selected_file" ]; then
echo 'No file selected.'
exit ${ERROR_NO_SAVEFILE}
fi
}
# Delete .chat files in DATA_DIR.
function delete_chat_file() {
selected_file=$(select_chat_with_fzf)
if [ -z "$selected_file" ]; then
echo 'No file selected.'
exit ${ERROR_NO_SAVEFILE}
else
local pretty_name=$(get_first_chat ${selected_file})
echo -n "do you want to delete '${pretty_name}' (y/n)? "
read response
if [[ "$response" == 'y' || "$response" == 'yes' ]]; then
rm -- "${selected_file}"
echo "Deleted '${pretty_name}'"
fi
fi
}
# Select saved chat with fzf program.
function select_chat_with_fzf() {
get_friendly_save_names
local selected_index=$(printf "%s\n" "${friendly_save_files[@]}" \
| cat -n | fzf --with-nth 2.. \
| awk '{print $1}')
selected_index=$((${selected_index}-1))
if [[ -n $selected_index ]]; then
echo "${save_files[selected_index]}"
fi
}
# Get an array of the first message in saved chats.
function get_friendly_save_names() {
get_save_files
friendly_save_files=()
for f in "${save_files[@]}"; do
friendly_save_files+=("$(get_first_chat ${f})")
done
}
# Validate site certificate.
function check_cert() {
curl "${CURL_FLAGS[@]}" ${OLLAMA_URL} 2>&1 >/dev/null
local ec=$?
if [ "${ec}" == '60' ]; then
print_error 'unable to get local issuer certificate.'
echo 'Install the certificate on the system.'
exit ${ERROR_INVALID_SSL}
elif [ "${ec}" != '0' ]; then
print_error 'unknown ssl error.'
exit ${ERROR_UNKNOWN_SSL}
fi
}
# Update chat history
function update_history() {
local role="$1"
local content="$2"
message_history=$(echo "$message_history" \
| jq --arg role "$role" --arg content \
"$content" '. + [{"role": $role, "content": $content}]')
}
# Read input from the user.
function read_user_input() {
if [ "${multiline_mode}" == true ]; then
msg=$(awk '{if ($0 == "END") exit; else print}')
elif [ "${code_review_start}" == true ]; then
check_git_directory
msg=''
gather_uncommitted_changes
gather_staged_changes
gather_commit_changes
code_review_start=false
else
read msg
fi
}
# Handle input related to CLI mode.
function handle_cli_mode() {
# Check for cli mode
if [ ${cli_mode} == true ]; then
if [[ -z $msg || $msg == 'run' || $msg == 'r' ]]; then
set_clear_color
autosave
echo
local commands=()
# Get a list of commands
while IFS= read -r line; do
commands+=("${line}")
done <<< "$last_cmd"
for c in "${commands[@]}"; do
# Using eval to handle commands that include pipes.
if [[ "${c}" == *'|'* ]]; then
eval "${c}"
else
${c}
fi
done
exit 0
fi
fi
}
# Check for editor request.
function handle_edit() {
if [[ $msg == 'edit' || $msg == 'e' ]]; then
editor_input
set_user_color
echo "${msg}"
fi
}
# Check for debug command.
function handle_debug() {
if [[ $msg == 'debug' ]]; then
print_debug
return 1
fi
return 0
}
# Check for save command.
function handle_save() {
if [[ $msg == 'save' || $msg == 's' ]]; then
echo "Saving chat history"
save_chat "$(date +%Y%m%d%H%M%S).chat"
exit 0
fi
}
# Chat converstation loop.
function chat_loop() {
check_if_model_exists ${selected_model}
update_history 'system' "$system_prompt"
while true; do
chat
done
}
# Main chat loop.
function chat() {
# Get user input.
set_user_color
print_user_start_message
read_user_input
echo
# Handle user input.
local rc=0
handle_edit
handle_cli_mode
handle_debug
rc=$((rc + $?))
handle_save
rc=$((rc + $?))
if [ "$rc" -ne 0 ]; then
return
fi
update_history 'user' "${msg}"
# Prepare JSON payload.
JSON_PAYLOAD=$(jq -n \
--arg model "$selected_model" \
--argjson messages "$message_history" \
'{model: $model, messages: $messages, stream: true}')
set_ai_color
print_ai_start_message
create_response_fifo
create_response_trap
# Render to console.
if [ "${rich_format_mode}" == true ]; then
cat ${RESPONSE_FIFO} | ${rich_format_path} &
else
cat ${RESPONSE_FIFO} &
fi
local flags=("${CURL_FLAGS[@]}")
local chat_path=''
local filter=''
if [ "${openai_api}" == true ]; then
flags+=(-H "Content-Type: application/json")
chat_path='/chat/completions'
filter='.choices[].delta.content // empty'
else
chat_path='/api/chat'
filter='.message.content // empty'
fi
local response=$(curl "${flags[@]}" "${OLLAMA_URL}${chat_path}" \
-d "${JSON_PAYLOAD}" | stdbuf -o0 sed 's/^data: //' \
| stdbuf -o0 jq -j "${filter}" 2>/dev/null \
| tee ${RESPONSE_FIFO})
wait
# Newline for AI response.
if [ "${rich_format_mode}" != true ]; then
echo
fi
# One line reponses do not print out when formatted with Streamdown.
if [[ "$rich_format_path" == *"streamdown"* && \
"${rich_format_mode}" == true ]]; then
local wc=$(echo "${response}" | wc -l)
if [ ${wc} -eq 1 ]; then
echo "${response}"
fi
fi
remove_response_trap
remove_response_fifo
echo
update_history "assistant" "${response}"
last_cmd="${response}"
}
#===============================================================================
check_requirements
if [ "${insecure_mode}" == true ]; then
CURL_FLAGS+=('-k')
else
check_cert
fi
if [ "${openai_api}" == true ]; then
CURL_FLAGS+=(-H "Authorization: Bearer ${key}")
fi
cmd=chat_loop
set_default_agent
# Check arguments
for i in "$@"; do
case $i in
-h|--help)
cmd=print_help
;;
-l|--list)
cmd=print_models
;;
--delete)
delete_chat_file
exit 0
;;
--load)
select_chat_file
source ${selected_file}
cmd=chat_loop
;;
--restore)
if [ ! -e "${DATA_DIR}/autosave.chat" ]; then
print_error 'auto save does not exit'
exit ${ERROR_NO_AUTOSAVE}
fi
source "${DATA_DIR}/autosave.chat"
cmd=chat_loop
;;
# Modes
--bash)
set_coding_model
set_bash_agent
cmd=chat_loop
;;
--cli)
set_coding_model
set_cli_agent
cmd=chat_loop
cli_mode=true
rich_format_mode=false
;;
--code-review)
set_coding_model
set_code_review_agent
code_review_start=true
cmd=chat_loop
;;
--git)
set_coding_model
set_git_agent
cmd=chat_loop
cli_mode=true
rich_format_mode=false
;;
-r|--reason)
set_reasoning_model
cmd=chat_loop
;;
--regex)
set_coding_model
set_regex_agent
cmd=chat_loop
rich_format_mode=false
;;
-ha|--home-assistant)
set_coding_model
set_home_assistant_agent
cmd=chat_loop
rich_format_mode=false
;;
# Other
-*|--*)
echo "Unknown option ${i}"
print_help
exit ERROR_UNKNOWN_OPTION
;;
esac
done
${cmd}
-196
View File
@@ -1,196 +0,0 @@
#!/bin/bash
# Show the remaining ChatGPT Codex rate limits for the current OpenAI login.
set -o pipefail
usage_url="${OPENAI_USAGE_URL:-https://chatgpt.com/backend-api/wham/usage}"
auth_file="${OPENAI_AUTH_FILE:-}"
output_format="text"
watch_interval=""
function usage {
cat <<'EOF'
Usage: openai-usage [--json] [--watch [SECONDS]]
Show the remaining Codex allowance for the OpenAI account logged into OpenCode
or the Codex CLI. The default watch interval is 60 seconds.
Environment:
OPENAI_AUTH_FILE Override the OAuth credential file
OPENAI_USAGE_URL Override the ChatGPT usage endpoint
EOF
}
function fail {
printf 'openai-usage: %s\n' "$1" >&2
exit 1
}
function require_command {
command -v "$1" &>/dev/null || fail "required command not found: $1"
}
function find_auth_file {
local opencode_auth
local codex_auth
if [[ -n "$auth_file" ]]; then
[[ -r "$auth_file" ]] || fail "cannot read auth file: $auth_file"
return
fi
opencode_auth="${XDG_DATA_HOME:-$HOME/.local/share}/opencode/auth.json"
codex_auth="${CODEX_HOME:-$HOME/.codex}/auth.json"
if [[ -r "$opencode_auth" ]]; then
auth_file="$opencode_auth"
elif [[ -r "$codex_auth" ]]; then
auth_file="$codex_auth"
else
fail "no OpenCode or Codex login found; run 'opencode auth login' first"
fi
}
function human_duration {
local total_seconds=$1
local days hours minutes
(( total_seconds < 0 )) && total_seconds=0
days=$((total_seconds / 86400))
hours=$(((total_seconds % 86400) / 3600))
minutes=$(((total_seconds % 3600) / 60))
if (( days > 0 )); then
printf '%dd %dh' "$days" "$hours"
elif (( hours > 0 )); then
printf '%dh %dm' "$hours" "$minutes"
else
printf '%dm' "$minutes"
fi
}
function format_reset_time {
local reset_at=$1
if date --date="@$reset_at" '+%a %b %-d, %-I:%M %p' 2>/dev/null; then
return
fi
# BSD date fallback.
date -r "$reset_at" '+%a %b %e, %l:%M %p' 2>/dev/null || printf '%s' "$reset_at"
}
function print_window {
local label=$1
local window=$2
local used_percent reset_after reset_at remaining
used_percent=$(jq -r '.used_percent // 0' <<<"$window")
reset_after=$(jq -r '.reset_after_seconds // 0 | floor' <<<"$window")
reset_at=$(jq -r '.reset_at // 0 | floor' <<<"$window")
remaining=$(jq -nr --argjson used "$used_percent" '100 - $used | if . < 0 then 0 else . end')
printf '%-8s %6g%% left resets in %-8s (%s)\n' \
"$label:" "$remaining" "$(human_duration "$reset_after")" "$(format_reset_time "$reset_at")"
}
function fetch_usage {
local access_token account_id raw_response status body
access_token=$(jq -r \
'.openai.access // .tokens.access_token // .access_token // empty' \
"$auth_file") || fail "invalid JSON in auth file: $auth_file"
account_id=$(jq -r \
'.openai.accountId // .tokens.account_id // .account_id // empty' \
"$auth_file") || fail "invalid JSON in auth file: $auth_file"
[[ -n "$access_token" ]] || fail "no OpenAI OAuth token found in $auth_file"
raw_response=$(curl --silent --show-error \
--header "Authorization: Bearer $access_token" \
--header "ChatGPT-Account-Id: $account_id" \
--header 'Accept: application/json' \
--write-out $'\n%{http_code}' \
"$usage_url") || fail "could not contact OpenAI"
status=${raw_response##*$'\n'}
body=${raw_response%$'\n'*}
case "$status" in
200) ;;
401|403) fail "OpenAI login expired; run 'opencode auth login' again" ;;
*) fail "OpenAI returned HTTP $status" ;;
esac
jq -e '.rate_limit' <<<"$body" >/dev/null || fail "unexpected response from OpenAI"
printf '%s\n' "$body"
}
function print_usage {
local response=$1
local plan primary secondary
if [[ "$output_format" == "json" ]]; then
jq '{
plan: .plan_type,
allowed: .rate_limit.allowed,
limit_reached: .rate_limit.limit_reached,
five_hour: (.rate_limit.primary_window | . + {
remaining_percent: ([100 - .used_percent, 0] | max)
}),
weekly: (.rate_limit.secondary_window | . + {
remaining_percent: ([100 - .used_percent, 0] | max)
})
}' <<<"$response"
return
fi
plan=$(jq -r '.plan_type // "unknown"' <<<"$response")
primary=$(jq -c '.rate_limit.primary_window' <<<"$response")
secondary=$(jq -c '.rate_limit.secondary_window' <<<"$response")
printf 'OpenAI Codex usage (%s)\n' "$plan"
print_window '5-hour' "$primary"
print_window 'Weekly' "$secondary"
}
while (( $# > 0 )); do
case "$1" in
--json)
output_format="json"
shift
;;
--watch)
watch_interval=60
if [[ ${2:-} =~ ^[1-9][0-9]*$ ]]; then
watch_interval=$2
shift
fi
shift
;;
-h|--help)
usage
exit 0
;;
*)
usage >&2
fail "unknown argument: $1"
;;
esac
done
require_command curl
require_command jq
find_auth_file
while true; do
if ! response=$(fetch_usage); then
[[ -n "$watch_interval" ]] || exit 1
sleep "$watch_interval"
continue
fi
print_usage "$response"
[[ -n "$watch_interval" ]] || break
sleep "$watch_interval"
done
-58
View File
@@ -1,58 +0,0 @@
#!/bin/bash
# Apply curated macOS preferences without copying machine-specific state.
set -euo pipefail
function usage {
echo "Usage: ${0##*/} [--dry-run]"
echo "Apply macOS preferences for the current user. Do not run with sudo."
}
dry_run=false
case "${1:-}" in
--dry-run) dry_run=true ;;
--help|-h) usage; exit 0 ;;
"") ;;
*) usage >&2; exit 1 ;;
esac
if [[ $# -gt 1 ]]; then
usage >&2
exit 1
fi
if [[ "$(uname -s)" != "Darwin" ]]; then
echo "This script only supports macOS." >&2
exit 1
fi
if [[ "$EUID" -eq 0 ]]; then
echo "Run this script as your normal user, not with sudo." >&2
exit 1
fi
function write_preference {
if [[ "$dry_run" == true ]]; then
printf '%q ' defaults write "$@"
printf '\n'
elif ! defaults write "$@"; then
echo "Could not write preference: $1 $2" >&2
exit 1
fi
}
# Existing preferences observed on this Mac. This is not a full defaults export:
# macOS also stores stock values, histories, and hardware-specific state there.
# Use dark appearance and automatically hide the Dock.
write_preference NSGlobalDomain AppleInterfaceStyle -string Dark
write_preference com.apple.dock autohide -bool true
# Use traditional scrolling and disable swipe-based back/forward navigation.
write_preference NSGlobalDomain com.apple.swipescrolldirection -bool false
write_preference NSGlobalDomain AppleEnableSwipeNavigateWithScrolls -bool false
# Remove the gaps around tiled windows (macOS Sequoia and later).
write_preference com.apple.WindowManager EnableTiledWindowMargins -bool false
if [[ "$dry_run" == false ]]; then
echo "Preferences saved. Log out and back in if changes are not visible."
fi
-50
View File
@@ -1,50 +0,0 @@
#!/bin/bash
# Restore Brave and place its windows after they finish opening.
preferences="$HOME/.config/BraveSoftware/Brave-Browser/Default/Preferences"
function enable_session_restore {
if [ ! -f "$preferences" ] || ! command -v jq &> /dev/null; then
return
fi
temp_file="$(mktemp "${preferences}.XXXXXX")"
if jq '.session.restore_on_startup = 1 | .profile.exit_type = "Normal"' \
"$preferences" > "$temp_file"; then
mv "$temp_file" "$preferences"
else
rm -f "$temp_file"
fi
}
enable_session_restore
if [ -n "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
brave-browser --restore-last-session &
# Signal starts after Brave and can steal focus while its window is mapping.
# Wait for both startup windows, then make Brave the final focused window.
for _ in {1..80}; do
sleep 0.25
if hyprctl clients -j | jq -e '
any(.[]; .class == "brave-browser") and
any(.[]; .class == "org.signal.Signal")
' > /dev/null; then
sleep 0.5
break
fi
done
hyprctl eval \
'hl.dispatch(hl.dsp.focus({ workspace = "1" }))' > /dev/null
exit 0
fi
i3-msg 'workspace 9; append_layout ~/.config/i3/brave-workspace-9.json; workspace 5'
brave-browser --restore-last-session &
# Brave creates restored windows asynchronously and after startup focus has moved.
for _ in {1..20}; do
sleep 0.5
i3-msg '[class="^Brave-browser$" workspace="^(?!9$).*"] move to workspace 5' \
> /dev/null
done
-107
View File
@@ -1,107 +0,0 @@
#! /bin/bash
# This script is a catch all program updater.
# Chezmoi Updater
function chezmoiUpdate {
if command -v chezmoi &> /dev/null; then
echo Updating chezmoi dotfiles...
chezmoi update
fi
}
# DNF Updater
function dnfUpdate {
if command -v dnf &> /dev/null; then
echo Updating DNF...
sudo dnf update #--exclude=wine*
fi
}
# Apt Updater
function aptUpdate {
if command -v apt &> /dev/null; then
echo Updating APT...
sudo apt update && sudo apt upgrade
fi
}
# Flatpack Updater
function flatpakUpdate {
if command -v flatpak &> /dev/null; then
echo Updating Flatpak...
flatpak uninstall --unused && flatpak update
fi
}
# Appimage Updater
function appimageUpdate {
if command -v am &> /dev/null; then
echo Updating AppImages...
am update
fi
}
# Homebrew Updater
function brewUpdate {
if command -v brew &> /dev/null; then
echo Updating Homebrew...
brew update && brew upgrade
fi
}
# Pass Repository Updater
function passUpdate {
if [ -d "$HOME/.password-store/.git" ] && [ -d "$HOME/.password-store" ]; then
echo Updating pass repository...
git -C "$HOME/.password-store" pull
fi
}
# Checks if a program is installed and if it is runs an updater script
function updateProgram {
if command -v $1 &> /dev/null; then
sh $2
fi
}
# Manually installed programs updater
function manualUpdate {
if command -v dnf &> /dev/null; then
echo Updating manually installed programs...
SCRIPT_PATH="$HOME/bin/installers"
updateProgram bitwig-studio $SCRIPT_PATH/bitwig-install.sh &
updateProgram /opt/dragonframe5/bin/Dragonframe $SCRIPT_PATH/dragonframe-install.sh &
updateProgram reaper $SCRIPT_PATH/reaper-install.sh &
updateProgram /opt/resolve/bin/resolve $SCRIPT_PATH/resolve-install.sh &
updateProgram /opt/keeweb/keeweb $SCRIPT_PATH/keeweb-install.sh &
updateProgram yabridgectl $SCRIPT_PATH/yabridge-install.sh &
wait
fi
}
update_failed=0
# Report failures while allowing the remaining updaters to run.
function run_updater {
if ! "$1"; then
echo "Updater failed: $1" >&2
update_failed=1
fi
}
run_updater chezmoiUpdate
echo ''
run_updater brewUpdate
run_updater dnfUpdate
run_updater aptUpdate
echo ''
run_updater flatpakUpdate
echo ''
run_updater appimageUpdate
echo ''
run_updater manualUpdate
echo ''
run_updater passUpdate
exit "$update_failed"
@@ -1,41 +0,0 @@
#! /bin/bash
# Automatic install script for Dragonframe
# Import library
source $(dirname ${BASH_SOURCE[0]})/install-lib.sh
# Fix issue with shared library files.
function postInstallFix() {
sudo rm /opt/dragonframe2024/lib/libtiff.so.5
sudo rm /opt/dragonframe2024/lib/libudev.so.0
sudo ln -s -f /lib64/libudev.so.1 /opt/dragonframe2024/lib/libudev.so.0
}
dragonframe=$(searchProgramInstalled dragonframe20* | \
awk 'END {print $(NF-2), $(NF-1), $NF}')
dragonframeVersion=$(echo $dragonframe | awk '{print $2;}' | filterVersion)
agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0'
url=$(curl -s https://www.dragonframe.com/downloads/ \
-A $agent | \
grep .rpm | grep downloadButton | grep downloadButton | \
grep -io 'https://[a-z0-9+-._/]*.rpm' | head -n 1)
urlVersion=$(echo $url | awk -F "-" '{ print $2 }')
# Check if installed to the most recent version
checkUptoDate dragonframe $dragonframeVersion $urlVersion
echo Installing Dragonframe $urlVersion
# Setting up and downloading package
mkdir -p ~/Downloads/installers/dragonframe
cd ~/Downloads/installers/dragonframe
installer=$(basename "$url")
curl -s $url \
-A $agent \
-o $installer
# Install package
sudo dnf install $installer -y
@@ -1,6 +0,0 @@
#!/usr/bin/env bash
# Import library
source $(dirname ${BASH_SOURCE[0]})/install-lib.sh
sudo $(packageManager) install rust cargo
@@ -1,41 +0,0 @@
#!/usr/bin/env bash
# Automatic install script for SuperSlicer.
# Import library
source $(dirname ${BASH_SOURCE[0]})/install-lib.sh
function desktopFile() {
echo 'Creating desktop file'
echo '[Desktop Entry]' > $1
echo "Name=${2}" >> $1
echo 'Comment=3D printing slicer' >> $1
echo "Exec=${3}" >> $1
echo 'Icon=' >> $1
echo 'Type=Application' >> $1
echo 'Terminal=false' >> $1
}
program='SuperSlicer'
programPath="${HOME}/.local/bin/${program}.AppImage"
programVersion=$($programPath --help | grep SuperSlicer | filterVersion)
url=$(curl -s https://api.github.com/repos/supermerill/SuperSlicer/releases)
urlVersion=$(echo $url | grep tag_name | filterVersion | head -n 1)
url=$(echo "$url" | grep browser_download | grep ubuntu | head -n 1 | \
tr -d '"'| awk '{print $2}')
# Check if installed to the most recent version
checkUptoDate $program $programVersion $urlVersion
echo Installing $program $urlVersion
# Setting up and downloading package
cd $(dirname $programPath)
rm $programPath
wget $url -O $program.AppImage
chmod +x $programPath
# Create desktop file
desktopPath="${HOME}/.local/share/applications/${program}.desktop"
if [ ! -f $desktopPath ]; then
desktopFile $desktopPath $program $programPath
fi
@@ -1,6 +0,0 @@
#!/usr/bin/env bash
# Import library
source $(dirname ${BASH_SOURCE[0]})/install-lib.sh
sudo $(packageManager) install sway waybar quickshell rofi mako alacritty brightnessctl
@@ -1,9 +0,0 @@
#!/usr/bin/env bash
# Install and set zsh as the default shell.
# Import library
source $(dirname ${BASH_SOURCE[0]})/install-lib.sh
sudo $(packageManager) install zsh
chsh -s $(which zsh)
@@ -1,52 +0,0 @@
#!/usr/bin/env bash
# Print help info.
function print_help() {
echo 'Control the backlight brightness with animation.'
echo
echo '-i -- increase brightness'
echo '-d -- decrease brightness'
}
# Increase backlight brightness.
function increase() {
run_animation 'light -A 0.1'
}
# Decrease backlight brightness.
function decrease() {
run_animation 'light -U 0.1'
}
# Run animation task.
function run_animation() {
local cmd="${1}"
i=0
while [ $i -lt 50 ]; do
${cmd}
sleep 0.01
((i = i + 1));
done
}
# Check arguments
for i in "$@"; do
case $i in
-h|--help)
print_help
exit 0
;;
-i)
increase
;;
-d)
decrease
;;
*)
print_help
exit 1
;;
esac
done
@@ -1,17 +0,0 @@
#!/usr/bin/env bash
# Update Passwords
pass git pull
# Desktop
~/bin/connect-nas.sh
~/bin/desktop/quickshell-start.sh
systemctl --user restart streamdeck
/usr/libexec/polkit-gnome-authentication-agent-1 &
# Keyring
dbus-update-activation-environment --all
/usr/bin/gnome-keyring-daemon --start --components=secrets,pkcs11,ssh
# NextCloud sync client
nextcloud --background &
-37
View File
@@ -1,37 +0,0 @@
# Shared command-line tools
brew "chezmoi"
brew "git"
brew "emacs"
brew "python"
brew "jq"
# Password-store secrets used by chezmoi templates
brew "pass"
brew "gnupg"
# Web browser
cask "brave-browser"
# Nextcloud file sync
cask "nextcloud"
# Gaming
cask "steam"
# 3D printing
cask "orcaslicer"
# Logitech mouse configuration
cask "logi-options+"
# Terminal and font used by the shared Alacritty configuration
cask "alacritty"
cask "font-inconsolata"
# Focus and raise windows when hovering
tap "dimentium/autoraise"
brew "dimentium/autoraise/autoraise"
# Optional tools for audio conversion and local AI
# brew "ffmpeg"
# brew "ollama"
-10
View File
@@ -1,10 +0,0 @@
# Focus and raise on hover without an intentional delay; never warp the cursor.
pollMillis=50
delay=1
requireMouseStop=true
warpX=0
warpY=0
# Hold Control to temporarily suspend hover focus.
disableKey=control
# Do not steal focus during authentication or screenshot selection.
stayFocusedBundleIds="com.apple.SecurityAgent,com.apple.screencaptureui"
@@ -1,5 +0,0 @@
sync_info = update
user_id =
setting_id =
base_id = GFSA04
updated_time = 1702867957
@@ -1,40 +0,0 @@
{
"fan_max_speed": [
"20"
],
"fan_min_speed": [
"10"
],
"filament_cost": [
"19.99"
],
"filament_max_volumetric_speed": [
"8"
],
"filament_settings_id": [
"PETG - Overture @CR-10s"
],
"filament_vendor": [
"Overture"
],
"from": "User",
"inherits": "My Generic PETG",
"is_custom_defined": "0",
"name": "PETG - Overture @CR-10s",
"nozzle_temperature": [
"245"
],
"nozzle_temperature_initial_layer": [
"245"
],
"overhang_fan_speed": [
"40"
],
"pressure_advance": [
"0.26"
],
"slow_down_layer_time": [
"1"
],
"version": "1.6.1.0"
}
@@ -1,5 +0,0 @@
sync_info = update
user_id =
setting_id =
base_id = GFSA04
updated_time = 1696802272
@@ -1,34 +0,0 @@
{
"enable_pressure_advance": [
"1"
],
"filament_cost": [
"19.99"
],
"filament_flow_ratio": [
"0.9025"
],
"filament_settings_id": [
"PETG - Overture"
],
"filament_vendor": [
"Overture"
],
"from": "User",
"inherits": "My Generic PETG",
"is_custom_defined": "0",
"name": "PETG - Overture",
"nozzle_temperature": [
"245"
],
"nozzle_temperature_initial_layer": [
"245"
],
"pressure_advance": [
"0.26"
],
"slow_down_layer_time": [
"1"
],
"version": "1.6.1.0"
}
@@ -1,5 +0,0 @@
sync_info = create
user_id =
setting_id =
base_id = GFSA04
updated_time = 1734886086
@@ -1,13 +0,0 @@
{
"filament_flow_ratio": [
"0.955"
],
"filament_settings_id": [
"Voron Overture PETG"
],
"from": "User",
"inherits": "Voron Generic PETG",
"is_custom_defined": "0",
"name": "Voron Overture PETG",
"version": "2.2.0.4"
}
@@ -1,5 +0,0 @@
sync_info = update
user_id =
setting_id =
base_id = GM001
updated_time = 1728686097
@@ -1,10 +0,0 @@
{
"from": "User",
"inherits": "Voron 2.4 350 0.4 nozzle",
"is_custom_defined": "0",
"machine_start_gcode": "PRINT_START BED_TEMP=[bed_temperature_initial_layer_single] EXTRUDER_TEMP=[nozzle_temperature_initial_layer]",
"name": "AquaVoron 2.4 350 0.4 nozzle",
"print_host": "192.168.20.21",
"printer_settings_id": "AquaVoron 2.4 350 0.4 nozzle",
"version": "1.8.0.0"
}
@@ -1,5 +0,0 @@
sync_info = update
user_id =
setting_id =
base_id = GM003
updated_time = 1728686148
@@ -1,13 +0,0 @@
{
"from": "User",
"inherits": "Voron 2.4 350 0.6 nozzle",
"is_custom_defined": "0",
"machine_start_gcode": "PRINT_START BED_TEMP=[bed_temperature_initial_layer_single] EXTRUDER_TEMP=[nozzle_temperature_initial_layer]",
"name": "AquaVoron 2.4 350 0.6 nozzle",
"print_host": "http://192.168.20.21",
"printer_settings_id": "AquaVoron 2.4 350 0.6 nozzle",
"retraction_length": [
"0.1"
],
"version": "1.8.0.0"
}
@@ -1,5 +0,0 @@
sync_info = create
user_id =
setting_id =
base_id = GM001
updated_time = 1695585702
@@ -1,86 +0,0 @@
{
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;{layer_z}\n\n",
"from": "User",
"inherits": "MyKlipper 0.4 nozzle",
"is_custom_defined": "0",
"machine_end_gcode": "END_PRINT",
"machine_max_acceleration_extruding": [
"500",
"20000"
],
"machine_max_acceleration_retracting": [
"1000",
"5000"
],
"machine_max_acceleration_x": [
"500",
"20000"
],
"machine_max_acceleration_y": [
"500",
"20000"
],
"machine_max_acceleration_z": [
"100",
"200"
],
"machine_max_jerk_e": [
"5",
"2.5"
],
"machine_max_jerk_x": [
"8",
"9"
],
"machine_max_jerk_y": [
"8",
"9"
],
"machine_max_jerk_z": [
"0.4",
"0.4"
],
"machine_max_speed_e": [
"60",
"25"
],
"machine_max_speed_z": [
"10",
"12"
],
"machine_start_gcode": "START_PRINT BED_TEMP=[bed_temperature_initial_layer_single] EXTRUDER_TEMP=[nozzle_temperature_initial_layer]",
"max_layer_height": [
"0.48"
],
"name": "CR-10s 0.25 nozzle",
"nozzle_diameter": [
"0.25"
],
"nozzle_type": "brass",
"print_host": "192.168.1.5",
"printable_area": [
"0x0",
"300x0",
"300x300",
"0x300"
],
"printable_height": "400",
"printer_settings_id": "CR-10s 0.25 nozzle",
"retract_length_toolchange": [
"1"
],
"retraction_length": [
"0.5"
],
"retraction_minimum_travel": [
"2"
],
"use_firmware_retraction": "1",
"version": "1.6.1.0",
"wipe": [
"0"
],
"z_hop_types": [
"Auto Lift"
]
}
@@ -1,5 +0,0 @@
sync_info = update
user_id =
setting_id =
base_id = GM001
updated_time = 1695585702
@@ -1,86 +0,0 @@
{
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;{layer_z}\n\n",
"from": "User",
"inherits": "MyKlipper 0.4 nozzle",
"is_custom_defined": "0",
"machine_end_gcode": "END_PRINT",
"machine_max_acceleration_extruding": [
"500",
"20000"
],
"machine_max_acceleration_retracting": [
"1000",
"5000"
],
"machine_max_acceleration_x": [
"500",
"20000"
],
"machine_max_acceleration_y": [
"500",
"20000"
],
"machine_max_acceleration_z": [
"100",
"200"
],
"machine_max_jerk_e": [
"5",
"2.5"
],
"machine_max_jerk_x": [
"8",
"9"
],
"machine_max_jerk_y": [
"8",
"9"
],
"machine_max_jerk_z": [
"0.4",
"0.4"
],
"machine_max_speed_e": [
"60",
"25"
],
"machine_max_speed_z": [
"10",
"12"
],
"machine_start_gcode": "START_PRINT BED_TEMP=[bed_temperature_initial_layer_single] EXTRUDER_TEMP=[nozzle_temperature_initial_layer]",
"max_layer_height": [
"0.48"
],
"name": "CR-10s 0.4 nozzle",
"nozzle_type": "brass",
"print_host": "https://cr10.aquamorph.com",
"printable_area": [
"0x0",
"300x0",
"300x300",
"0x300"
],
"printable_height": "400",
"printer_settings_id": "CR-10s 0.4 nozzle",
"retract_length_toolchange": [
"1"
],
"retraction_length": [
"0.5"
],
"retraction_minimum_travel": [
"2"
],
"use_firmware_retraction": "1",
"version": "1.6.1.0",
"wipe": [
"0"
],
"z_hop": [
"0"
],
"z_hop_types": [
"Auto Lift"
]
}
@@ -1,5 +0,0 @@
sync_info = update
user_id =
setting_id =
base_id = GM001
updated_time = 1702220626
@@ -1,89 +0,0 @@
{
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;{layer_z}\n\n",
"from": "User",
"inherits": "MyKlipper 0.4 nozzle",
"is_custom_defined": "0",
"machine_end_gcode": "END_PRINT",
"machine_max_acceleration_extruding": [
"500",
"20000"
],
"machine_max_acceleration_retracting": [
"1000",
"5000"
],
"machine_max_acceleration_x": [
"500",
"20000"
],
"machine_max_acceleration_y": [
"500",
"20000"
],
"machine_max_acceleration_z": [
"100",
"200"
],
"machine_max_jerk_e": [
"5",
"2.5"
],
"machine_max_jerk_x": [
"8",
"9"
],
"machine_max_jerk_y": [
"8",
"9"
],
"machine_max_jerk_z": [
"0.4",
"0.4"
],
"machine_max_speed_e": [
"60",
"25"
],
"machine_max_speed_z": [
"10",
"12"
],
"machine_start_gcode": "START_PRINT BED_TEMP=[bed_temperature_initial_layer_single] EXTRUDER_TEMP=[nozzle_temperature_initial_layer]",
"max_layer_height": [
"0.48"
],
"name": "CR-10s 0.6 nozzle",
"nozzle_diameter": [
"0.6"
],
"nozzle_type": "brass",
"print_host": "192.168.20.20",
"printable_area": [
"0x0",
"300x0",
"300x300",
"0x300"
],
"printable_height": "400",
"printer_settings_id": "CR-10s 0.6 nozzle",
"retract_length_toolchange": [
"1"
],
"retraction_length": [
"0.5"
],
"retraction_minimum_travel": [
"2"
],
"use_firmware_retraction": "1",
"version": "1.6.1.0",
"wipe": [
"0"
],
"z_hop": [
"0"
],
"z_hop_types": [
"Auto Lift"
]
}
@@ -1,5 +0,0 @@
sync_info = update
user_id =
setting_id =
base_id = GM001
updated_time = 1695341948
@@ -1,85 +0,0 @@
{
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;{layer_z}\n\n",
"from": "User",
"inherits": "MyKlipper 0.4 nozzle",
"is_custom_defined": "0",
"machine_end_gcode": "END_PRINT",
"machine_max_acceleration_extruding": [
"500",
"20000"
],
"machine_max_acceleration_retracting": [
"1000",
"5000"
],
"machine_max_acceleration_x": [
"500",
"20000"
],
"machine_max_acceleration_y": [
"500",
"20000"
],
"machine_max_acceleration_z": [
"100",
"200"
],
"machine_max_jerk_e": [
"5",
"2.5"
],
"machine_max_jerk_x": [
"8",
"9"
],
"machine_max_jerk_y": [
"8",
"9"
],
"machine_max_jerk_z": [
"0.4",
"0.4"
],
"machine_max_speed_e": [
"60",
"25"
],
"machine_max_speed_z": [
"10",
"12"
],
"machine_start_gcode": "START_PRINT BED_TEMP=[bed_temperature_initial_layer_single] EXTRUDER_TEMP=[nozzle_temperature_initial_layer]",
"max_layer_height": [
"0.48"
],
"name": "Ender 3 0.6 nozzle",
"nozzle_diameter": [
"0.6"
],
"nozzle_type": "brass",
"print_host": "192.168.1.6",
"printable_area": [
"0x0",
"235x0",
"235x235",
"0x235"
],
"printer_settings_id": "Ender 3 0.6 nozzle",
"retract_length_toolchange": [
"1"
],
"retraction_length": [
"0.5"
],
"retraction_minimum_travel": [
"2"
],
"use_firmware_retraction": "1",
"version": "1.6.1.0",
"wipe": [
"0"
],
"z_hop_types": [
"Auto Lift"
]
}
@@ -1,5 +0,0 @@
sync_info =
user_id =
setting_id =
base_id = GP004
updated_time = 1735702877
@@ -1,9 +0,0 @@
{
"brim_type": "no_brim",
"from": "User",
"inherits": "0.18mm Fine 0.6 nozzle @Voron",
"is_custom_defined": "0",
"name": "0.18mm Fine 0.6 nozzle @Voron - AquaMorph",
"print_settings_id": "0.18mm Fine 0.6 nozzle @Voron - AquaMorph",
"version": "2.2.0.4"
}
@@ -1,5 +0,0 @@
sync_info = update
user_id =
setting_id =
base_id = GP004
updated_time = 1702867957
@@ -1,41 +0,0 @@
{
"brim_type": "no_brim",
"brim_width": "10",
"default_acceleration": "0",
"enable_support": "1",
"from": "User",
"gap_infill_speed": "30",
"infill_combination": "1",
"inherits": "0.20mm Standard @MyKlipper",
"initial_layer_acceleration": "0",
"initial_layer_infill_speed": "35",
"initial_layer_line_width": "137%",
"initial_layer_speed": "20",
"inner_wall_acceleration": "0",
"inner_wall_line_width": "112%",
"inner_wall_speed": "35",
"internal_solid_infill_line_width": "112%",
"internal_solid_infill_speed": "50",
"is_custom_defined": "0",
"line_width": "100%",
"name": "0.20mm Standard CR-10s",
"outer_wall_acceleration": "0",
"outer_wall_line_width": "80%",
"outer_wall_speed": "35",
"print_settings_id": "0.20mm Standard CR-10s",
"sparse_infill_density": "30%",
"sparse_infill_line_width": "107%",
"sparse_infill_pattern": "adaptivecubic",
"sparse_infill_speed": "60",
"support_interface_speed": "30",
"support_line_width": "95%",
"support_object_xy_distance": "0.75",
"support_speed": "30",
"support_type": "tree(auto)",
"top_surface_acceleration": "0",
"top_surface_line_width": "107%",
"top_surface_speed": "30",
"travel_acceleration": "1500",
"travel_speed": "150",
"version": "1.6.1.0"
}
@@ -1,5 +0,0 @@
sync_info =
user_id =
setting_id =
base_id = GP004
updated_time = 1736606291
@@ -1,9 +0,0 @@
{
"brim_type": "no_brim",
"from": "User",
"inherits": "0.30mm Standard 0.6 nozzle @Voron",
"is_custom_defined": "0",
"name": "0.30mm Standard 0.6 nozzle @Voron - AquaMorph",
"print_settings_id": "0.30mm Standard 0.6 nozzle @Voron - AquaMorph",
"version": "2.2.0.4"
}
-606
View File
@@ -1,606 +0,0 @@
[bell]
animation = "EaseOutExpo"
color = "0xffffff"
duration = 0
[colors]
draw_bold_text_with_bright_colors = true
[colors.bright]
black = "0x666666"
blue = "0x7aa6da"
cyan = "0x54ced6"
green = "0x9ec400"
magenta = "0xb77ee0"
red = "0xff3334"
white = "0xffffff"
yellow = "0xe7c547"
[colors.normal]
black = "0x000000"
blue = "0x7aa6da"
cyan = "0x70c0ba"
green = "0xb9ca4a"
magenta = "0xc397d8"
red = "0xd54e53"
white = "0xeaeaea"
yellow = "0xe6c547"
[colors.primary]
background = "0x000000"
foreground = "0x0288d1"
[cursor]
style = "Block"
unfocused_hollow = true
[debug]
log_level = "Warn"
persistent_logging = false
print_events = false
render_timer = false
[font]
size = 16.0
[font.glyph_offset]
x = 0
y = 0
[font.normal]
family = "Inconsolata"
style = "Monospace"
[font.offset]
x = 0
y = 0
[[keyboard.bindings]]
action = "Paste"
key = "Paste"
[[keyboard.bindings]]
action = "Copy"
key = "Copy"
[[keyboard.bindings]]
action = "ClearLogNotice"
key = "L"
mods = "Control"
[[keyboard.bindings]]
chars = "\f"
key = "L"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[1;3H"
key = "Home"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001BOH"
key = "Home"
mode = "AppCursor"
[[keyboard.bindings]]
chars = "\u001B[H"
key = "Home"
mode = "~AppCursor"
[[keyboard.bindings]]
chars = "\u001B[1;3F"
key = "End"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001BOF"
key = "End"
mode = "AppCursor"
[[keyboard.bindings]]
chars = "\u001B[F"
key = "End"
mode = "~AppCursor"
[[keyboard.bindings]]
action = "ScrollPageUp"
key = "PageUp"
mode = "~Alt"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[5;2~"
key = "PageUp"
mode = "Alt"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[5;5~"
key = "PageUp"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[5;3~"
key = "PageUp"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[5~"
key = "PageUp"
[[keyboard.bindings]]
action = "ScrollPageDown"
key = "PageDown"
mode = "~Alt"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[6;2~"
key = "PageDown"
mode = "Alt"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[6;5~"
key = "PageDown"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[6;3~"
key = "PageDown"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[6~"
key = "PageDown"
[[keyboard.bindings]]
chars = "\u001B[Z"
key = "Tab"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u007F"
key = "Back"
[[keyboard.bindings]]
chars = "\u001B\u007F"
key = "Back"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[2~"
key = "Insert"
[[keyboard.bindings]]
chars = "\u001B[3~"
key = "Delete"
[[keyboard.bindings]]
chars = "\u001B[1;2D"
key = "Left"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[1;5D"
key = "Left"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[1;3D"
key = "Left"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[D"
key = "Left"
mode = "~AppCursor"
[[keyboard.bindings]]
chars = "\u001BOD"
key = "Left"
mode = "AppCursor"
[[keyboard.bindings]]
chars = "\u001B[1;2C"
key = "Right"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[1;5C"
key = "Right"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[1;3C"
key = "Right"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[C"
key = "Right"
mode = "~AppCursor"
[[keyboard.bindings]]
chars = "\u001BOC"
key = "Right"
mode = "AppCursor"
[[keyboard.bindings]]
chars = "\u001B[1;2A"
key = "Up"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[1;5A"
key = "Up"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[1;3A"
key = "Up"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[A"
key = "Up"
mode = "~AppCursor"
[[keyboard.bindings]]
chars = "\u001BOA"
key = "Up"
mode = "AppCursor"
[[keyboard.bindings]]
chars = "\u001B[1;2B"
key = "Down"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[1;5B"
key = "Down"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[1;3B"
key = "Down"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[B"
key = "Down"
mode = "~AppCursor"
[[keyboard.bindings]]
chars = "\u001BOB"
key = "Down"
mode = "AppCursor"
[[keyboard.bindings]]
chars = "\u001BOP"
key = "F1"
[[keyboard.bindings]]
chars = "\u001BOQ"
key = "F2"
[[keyboard.bindings]]
chars = "\u001BOR"
key = "F3"
[[keyboard.bindings]]
chars = "\u001BOS"
key = "F4"
[[keyboard.bindings]]
chars = "\u001B[15~"
key = "F5"
[[keyboard.bindings]]
chars = "\u001B[17~"
key = "F6"
[[keyboard.bindings]]
chars = "\u001B[18~"
key = "F7"
[[keyboard.bindings]]
chars = "\u001B[19~"
key = "F8"
[[keyboard.bindings]]
chars = "\u001B[20~"
key = "F9"
[[keyboard.bindings]]
chars = "\u001B[21~"
key = "F10"
[[keyboard.bindings]]
chars = "\u001B[23~"
key = "F11"
[[keyboard.bindings]]
chars = "\u001B[24~"
key = "F12"
[[keyboard.bindings]]
chars = "\u001B[1;2P"
key = "F1"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[1;2Q"
key = "F2"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[1;2R"
key = "F3"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[1;2S"
key = "F4"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[15;2~"
key = "F5"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[17;2~"
key = "F6"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[18;2~"
key = "F7"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[19;2~"
key = "F8"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[20;2~"
key = "F9"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[21;2~"
key = "F10"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[23;2~"
key = "F11"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[24;2~"
key = "F12"
mods = "Shift"
[[keyboard.bindings]]
chars = "\u001B[1;5P"
key = "F1"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[1;5Q"
key = "F2"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[1;5R"
key = "F3"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[1;5S"
key = "F4"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[15;5~"
key = "F5"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[17;5~"
key = "F6"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[18;5~"
key = "F7"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[19;5~"
key = "F8"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[20;5~"
key = "F9"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[21;5~"
key = "F10"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[23;5~"
key = "F11"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[24;5~"
key = "F12"
mods = "Control"
[[keyboard.bindings]]
chars = "\u001B[1;6P"
key = "F1"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[1;6Q"
key = "F2"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[1;6R"
key = "F3"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[1;6S"
key = "F4"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[15;6~"
key = "F5"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[17;6~"
key = "F6"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[18;6~"
key = "F7"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[19;6~"
key = "F8"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[20;6~"
key = "F9"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[21;6~"
key = "F10"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[23;6~"
key = "F11"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[24;6~"
key = "F12"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001B[1;3P"
key = "F1"
mods = "Super"
[[keyboard.bindings]]
chars = "\u001B[1;3Q"
key = "F2"
mods = "Super"
[[keyboard.bindings]]
chars = "\u001B[1;3R"
key = "F3"
mods = "Super"
[[keyboard.bindings]]
chars = "\u001B[1;3S"
key = "F4"
mods = "Super"
[[keyboard.bindings]]
chars = "\u001B[15;3~"
key = "F5"
mods = "Super"
[[keyboard.bindings]]
chars = "\u001B[17;3~"
key = "F6"
mods = "Super"
[[keyboard.bindings]]
chars = "\u001B[18;3~"
key = "F7"
mods = "Super"
[[keyboard.bindings]]
chars = "\u001B[19;3~"
key = "F8"
mods = "Super"
[[keyboard.bindings]]
chars = "\u001B[20;3~"
key = "F9"
mods = "Super"
[[keyboard.bindings]]
chars = "\u001B[21;3~"
key = "F10"
mods = "Super"
[[keyboard.bindings]]
chars = "\u001B[23;3~"
key = "F11"
mods = "Super"
[[keyboard.bindings]]
chars = "\u001B[24;3~"
key = "F12"
mods = "Super"
[[keyboard.bindings]]
chars = """
"""
key = "NumpadEnter"
[mouse]
hide_when_typing = false
[[mouse.bindings]]
action = "PasteSelection"
mouse = "Middle"
[scrolling]
history = 10000
multiplier = 3
[selection]
save_to_clipboard = false
semantic_escape_chars = ",│`|:\"' ()[]{}<>"
[window]
decorations = "full"
dynamic_padding = false
opacity = 0.8
startup_mode = "Windowed"
[window.dimensions]
columns = 0
lines = 0
[window.padding]
x = 4
y = 4
[general]
live_config_reload = true
working_directory = "None"
-32
View File
@@ -1,32 +0,0 @@
stickzone del STICK_PAGEUP
stickzone del STICK_PAGEDOWN
stickzone bounds STICK_LEFT 0.0 0.3 0.2 0.7
stickzone bounds STICK_RIGHT 0.8 0.3 1.0 0.7
stickzone bounds STICK_UP 0.3 0.0 0.7 0.2
stickzone bounds STICK_DOWN 0.3 0.8 0.7 1.0
# Map Toggle / Sabotage
bind LEFT KEY_TAB
# Use Vent as Imposter
bind STICK_DOWN KEY_V
# Interact
bind G22 KEY_SPACE
# Kill
bind STICK_UP KEY_Q
# Report
bind G6 KEY_R
# Role Ability
bind DOWN KEY_F
# Character Movement
bind G4 KEY_W
bind G10 KEY_A
bind G11 KEY_S
bind G12 KEY_D
rgb 255 0 0
Binary file not shown.
-39
View File
@@ -1,39 +0,0 @@
stickzone del STICK_PAGEUP
stickzone del STICK_PAGEDOWN
stickzone bounds STICK_LEFT 0.0 0.3 0.2 0.7
stickzone bounds STICK_RIGHT 0.8 0.3 1.0 0.7
stickzone bounds STICK_UP 0.3 0.0 0.7 0.2
stickzone bounds STICK_DOWN 0.3 0.8 0.7 1.0
# Character Movement
bind G4 KEY_W
bind G10 KEY_A
bind G11 KEY_S
bind G12 KEY_D
bind G22 KEY_SPACE
bind G20 KEY_RIGHTCTRL
bind G15 KEY_RIGHTCTRL
# Hook
bind STICK_UP KEY_F
bind STICK_DOWN KEY_F
# Enter Batmobile
bind DOWN KEY_E
# Detective Mode
bind G5 LEFT KEY_X
# Choose gadget
bind G14 KEY_G
# Augmented Reality Challenges
bind G19 KEY_ C
# Mission Choice
bind G1 KEY_V
# Electric Tool
bind G6 KEY_4
rgb 255 5 5
Binary file not shown.
-48
View File
@@ -1,48 +0,0 @@
stickzone del STICK_PAGEUP
stickzone del STICK_PAGEDOWN
stickzone bounds STICK_LEFT 0.0 0.3 0.2 0.7
stickzone bounds STICK_RIGHT 0.8 0.3 1.0 0.7
stickzone bounds STICK_UP 0.3 0.0 0.7 0.2
stickzone bounds STICK_DOWN 0.3 0.8 0.7 1.0
# Character screen / Confirm Window
bind G5 KEY_E
# Clear cursor / Pipette tool
bind G3 KEY_Q
# Rotate
bind G6 KEY_R
# Flip blueprints horizontal / Pickup ground item
bind G13 KEY_F
# Flip blueprints vertical
bind G14 KEY_G
# Drop Item
bind G16 KEY_Z
# Shoot selected
bind G18 KEY_C
#
bind STICK_UP KEY_1
bind STICK_RIGHT KEY_2
bind STICK_DOWN KEY_3
bind STICK_LEFT KEY_4
# Other
bind G22 KEY_SPACE
bind G15 KEY_LEFTSHIFT
bind G20 KEY_LEFTCTRL
bind DOWN KEY_ENTER
bind LEFT KEY_TAB
# Character Movement
bind G4 KEY_W
bind G10 KEY_A
bind G11 KEY_S
bind G12 KEY_D
rgb 230 145 0
Binary file not shown.
-29
View File
@@ -1,29 +0,0 @@
local programs = require("env")
local main_mod = "SUPER"
hl.bind(main_mod .. " + return", hl.dsp.exec_cmd(programs.terminal))
hl.bind(main_mod .. " + Q", hl.dsp.window.close())
hl.bind(main_mod .. " + E", hl.dsp.exec_cmd(programs.file_manager))
hl.bind(main_mod .. " + V", hl.dsp.window.float({ action = "toggle" }))
hl.bind(main_mod .. " + D", hl.dsp.exec_cmd(programs.menu))
hl.bind(main_mod .. " + P", hl.dsp.window.pseudo())
hl.bind(main_mod .. " + J", hl.dsp.layout("togglesplit"))
hl.bind(main_mod .. " + L", hl.dsp.exec_cmd("hyprlock"))
hl.bind(main_mod .. " + F", hl.dsp.window.fullscreen())
hl.bind(main_mod .. " + left", hl.dsp.focus({ direction = "left" }))
hl.bind(main_mod .. " + right", hl.dsp.focus({ direction = "right" }))
hl.bind(main_mod .. " + up", hl.dsp.focus({ direction = "up" }))
hl.bind(main_mod .. " + down", hl.dsp.focus({ direction = "down" }))
for workspace = 1, 10 do
local key = workspace % 10
hl.bind(main_mod .. " + " .. key, hl.dsp.focus({ workspace = workspace }))
hl.bind(main_mod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = workspace }))
end
hl.bind(main_mod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
hl.bind(main_mod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
hl.bind(main_mod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
hl.bind(main_mod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
-18
View File
@@ -1,18 +0,0 @@
local main_mod = "SUPER"
hl.on("hyprland.start", function()
hl.exec_cmd("light -N 1")
end)
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("~/bin/system/backlight-ctl.sh -i"))
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("~/bin/system/backlight-ctl.sh -d"))
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("amixer set Master 3%+"))
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("amixer set Master 3%-"))
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("amixer set Master toggle"))
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"))
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"))
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"))
hl.bind(main_mod .. " + escape", hl.dsp.exec_cmd("swaylock"))
-9
View File
@@ -1,9 +0,0 @@
hl.env("XCURSOR_SIZE", "24")
hl.env("QT_QPA_PLATFORMTHEME", "qt5ct")
return {
terminal = "alacritty",
file_manager = "dolphin",
menu = "rofi -show combi",
browser = "brave-browser",
}
-56
View File
@@ -1,56 +0,0 @@
hl.config({
general = {
gaps_in = 5,
gaps_out = 5,
border_size = 2,
col = {
active_border = {
colors = { "rgba(e91e63ee)", "rgba(ffcdd2ee)" },
angle = 45,
},
inactive_border = "rgba(0288d1aa)",
},
layout = "dwindle",
allow_tearing = false,
},
decoration = {
rounding = 5,
blur = {
enabled = true,
size = 3,
passes = 1,
},
},
animations = {
enabled = true,
},
dwindle = {
preserve_split = true,
force_split = 2,
},
master = {
orientation = "right",
},
})
hl.curve("myBezier", {
type = "bezier",
points = { { 0.05, 0.9 }, { 0.1, 1.05 } },
})
hl.animation({ leaf = "windows", enabled = true, speed = 3, bezier = "myBezier" })
hl.animation({ leaf = "windowsOut", enabled = true, speed = 7, bezier = "default", style = "popin 80%" })
hl.animation({ leaf = "border", enabled = true, speed = 10, bezier = "default" })
hl.animation({ leaf = "borderangle", enabled = true, speed = 8, bezier = "default" })
hl.animation({ leaf = "fade", enabled = true, speed = 7, bezier = "default" })
hl.animation({ leaf = "workspaces", enabled = true, speed = 2, bezier = "default" })
hl.gesture({
fingers = 3,
direction = "horizontal",
action = "workspace",
})
-21
View File
@@ -1,21 +0,0 @@
general {
lock_cmd = pidof hyprlock || hyprlock
before_sleep_cmd = loginctl lock-session
after_sleep_cmd = hyprctl dispatch dpms on
}
listener {
timeout = 300
on-timeout = loginctl lock-session
}
listener {
timeout = 600
on-timeout = hyprctl dispatch dpms off
on-resume = hyprctl dispatch dpms on
}
listener {
timeout = 1200
on-timeout = sh -c 'test "$(cat /sys/class/power_supply/ACAD/online)" = 0 && systemctl suspend'
}
-51
View File
@@ -1,51 +0,0 @@
hl.monitor({
output = "eDP-1",
mode = "2256x1504@60",
position = "auto",
scale = 1.175,
})
require("env")
require("startup-all")
require("startup-framework")
require("general")
hl.config({
input = {
kb_layout = "us",
kb_variant = "",
kb_model = "",
kb_options = "",
kb_rules = "",
follow_mouse = 1,
touchpad = {
natural_scroll = true,
},
sensitivity = 0,
},
xwayland = {
force_zero_scaling = true,
},
misc = {
force_default_wallpaper = 0,
},
})
hl.window_rule({
name = "suppress-maximize-events",
match = { class = ".*" },
suppress_event = "maximize",
})
hl.window_rule({
name = "signal-workspace",
match = { class = "^org\\.signal\\.Signal$" },
workspace = "10",
})
require("bind-all")
require("bind-framework")
-99
View File
@@ -1,99 +0,0 @@
auth {
pam {
module = password-auth
}
fingerprint {
enabled = true
}
}
background {
monitor =
path = $HOME/Pictures/wallpaper/0000.jpg
blur_size = 2
blur_passes = 1
noise = 0.01
contrast = 1.08
brightness = 0.68
vibrancy = 0.22
vibrancy_darkness = 0.15
}
label {
monitor =
text = cmd[update:1000] date +"%H:%M"
color = rgb(9DEBFF)
font_size = 104
font_family = Noto Sans Mono
position = 0, 230
halign = center
valign = center
shadow_passes = 3
shadow_size = 10
shadow_color = rgba(00D9FF55)
}
shape {
monitor =
size = 460, 2
color = rgb(00D9FF)
position = 0, 152
halign = center
valign = center
}
shape {
monitor =
size = 110, 2
color = rgb(FF2A9D)
position = 285, 152
halign = center
valign = center
}
label {
monitor =
text = // $USER
color = rgb(FF5CB8)
font_size = 18
font_family = Noto Sans Mono
position = 0, 112
halign = center
valign = center
shadow_passes = 2
shadow_size = 7
shadow_color = rgba(FF2A9D66)
}
input-field {
monitor =
size = 340, 54
outline_thickness = 2
dots_size = 0.22
dots_spacing = 0.3
dots_center = true
dots_rounding = -1
outer_color = rgb(00D9FF)
inner_color = rgba(3, 7, 18, 0.82)
font_color = rgb(FF5CB8)
fade_on_empty = true
fade_timeout = 1000
placeholder_text =
hide_input = false
rounding = 4
check_color = rgb(FF2A9D)
fail_color = rgb(FF2A9D)
fail_text =
capslock_color = -1
numlock_color = -1
bothlock_color = -1
invert_numlock = false # change color if numlock is off
swap_font_color = false # see below
position = 0, -35
halign = center
valign = center
shadow_passes = 3
shadow_size = 10
shadow_color = rgba(00D9FF55)
}
-6
View File
@@ -1,6 +0,0 @@
hl.on("hyprland.start", function()
hl.exec_cmd("swaybg --image ~/Pictures/wallpaper/0000.jpg --mode fill")
hl.exec_cmd("pass git pull")
hl.exec_cmd("~/bin/system/system-start.sh")
hl.exec_cmd("hypridle")
end)
@@ -1,7 +0,0 @@
local programs = require("env")
hl.on("hyprland.start", function()
hl.exec_cmd("~/bin/start-brave.sh", { workspace = "1 silent" })
hl.exec_cmd(programs.terminal, { workspace = "2 silent" })
hl.exec_cmd("flatpak run org.signal.Signal", { workspace = "10 silent" })
end)
-32
View File
@@ -1,32 +0,0 @@
{
"border": "normal",
"floating": "auto_off",
"layout": "splitv",
"type": "con",
"nodes": [
{
"border": "pixel",
"floating": "auto_off",
"percent": 0.5,
"swallows": [
{
"class": "^Brave-browser$",
"title": ".*Music Assistant.*"
}
],
"type": "con"
},
{
"border": "pixel",
"floating": "auto_off",
"percent": 0.5,
"swallows": [
{
"class": "^Brave-browser$",
"title": ".*YouTube.*"
}
],
"type": "con"
}
]
}

Some files were not shown because too many files have changed in this diff Show More