Compare commits

..

91 Commits

Author SHA1 Message Date
KenwoodFox
89ed2acf2b Add in millyard labs 2026-06-02 15:50:37 -04:00
KenwoodFox
fc11a2202d Resolve stash conflicts in ssh config and zshrc 2026-06-02 13:55:28 -04:00
KenwoodFox
f3be14b0ed Add computer script 2026-06-02 13:47:03 -04:00
KenwoodFox
ea7f187c8b Clean ZSH 2026-01-29 11:15:13 -05:00
KenwoodFox
5be67afa54 Add paths 2026-01-06 16:36:35 -05:00
KenwoodFox
3970f9bca7 Add paths 2026-01-06 16:35:34 -05:00
KenwoodFox
f46000649c Tada 2025-10-14 17:44:51 -04:00
9c819d6325 Bump ssh 2025-05-25 14:01:00 -04:00
a23e71ab5a Just include some new things 2025-05-25 14:00:50 -04:00
ce836a568c Bump a few things 2024-09-30 13:32:02 -04:00
23d7c0d52f Bump a few things 2024-04-23 12:19:03 -04:00
129f8ab159 Add new DNS entry for ssh.kitsunehosting.net 2024-01-02 15:22:14 -05:00
4471fe0bb9 Bump some leftovers 2023-12-22 13:00:39 -05:00
8d699bccd6 Add tools from https://wiki.freecad.org/WebTools_Git 2023-09-29 14:19:08 -04:00
a99ca6431e Bump 2023-08-20 13:29:06 -04:00
d5fd5b8c38 Add new tools 2023-06-05 09:54:33 -04:00
979d769bfb update bosch 2023-06-04 16:38:15 -04:00
08ece46452 copy in default freecad toolbits 2023-06-04 16:38:05 -04:00
4c78b77e60 update gitconfig 2023-05-17 16:19:24 -04:00
d3b21fb2f1 Add new ssh hosts 2023-05-14 20:58:10 -04:00
ce12e90225 Add discompress 2023-04-18 00:29:59 -04:00
5c8ad98bb5 Enable auto push setup remote 2023-01-26 22:30:59 -05:00
1bc335aed0 This is a cooler color 2022-12-27 23:13:11 -05:00
ca9cbe18c5 Clean this a little 2022-12-27 23:13:00 -05:00
99c1d3a687 Been a bit 2022-12-11 01:27:07 -05:00
a8f2dd1bce Add alias 2022-05-20 16:19:22 -04:00
7b92c7dcbb Add foxfetch 2022-04-23 13:43:12 -04:00
e33cc7c7fb Bump bitbucket keys 2022-04-21 09:40:49 -04:00
753cac807c Default branch push 2022-03-16 18:07:16 -04:00
c5cf7ad409 Add vimrc 2022-02-18 13:55:00 -05:00
c13bf64d6a Add signing key (yubikey) 2021-12-16 17:14:48 -05:00
50707192f5 Add shemes 2021-12-16 17:14:36 -05:00
d63a4cb533 Notes are useful 2021-12-06 10:10:04 -05:00
1efeb4764d Add switch keys script 2021-12-05 19:32:03 -05:00
a3c32d0e19 Sync freecad macros 2021-12-04 12:24:36 -05:00
b9edb81cd6 Update ssh config 2021-12-04 12:23:58 -05:00
f619b691e9 Update houston username 2021-11-27 14:08:36 -05:00
695d4b58c1 Update houston hostname 2021-11-27 14:05:43 -05:00
dc9a7b745c Add reports 2021-10-14 11:21:24 -04:00
bc978af2c5 update on wklptop 2021-10-14 11:19:24 -04:00
216df5e146 Fix vimrc 2021-09-15 08:37:49 -04:00
260532282c Add vimrc 2021-09-13 09:12:34 -04:00
76ba75ccbf I aint no racist b 2021-09-08 12:14:03 -04:00
c436d5b27a Move describe.sh so it has a nicer cli name 2021-09-07 02:19:30 -04:00
7b2ca206b5 VCS Describe script 2021-09-04 01:52:32 -04:00
fd8e4789b6 clean 2021-08-24 21:20:22 -04:00
bcf9cfa699 Fix merge 2021-08-24 18:36:18 -04:00
2f533116b7 Merge branch 'master' of https://kitsunehosting.net/gitea/Kenwood/dotfiles 2021-08-24 15:14:04 -04:00
9133031e6b Fix trailing slash 2021-08-24 15:13:58 -04:00
7a43bcb1b2 Merge https://kitsunehosting.net/gitea/Kenwood/dotfiles 2021-08-24 15:12:39 -04:00
0a96bc9749 Update ssh identity file 2021-08-24 13:04:44 -04:00
21046c29b9 I dont actually know why a merge was neccicary here both hosts said they were up to date 2021-08-24 13:01:16 -04:00
e3b7132c2c Update ssh config 2021-08-24 13:01:00 -04:00
15f2bc7dcc Update ssh config 2021-08-19 09:41:11 -04:00
0c13fafaf5 Add fortune to zshrc 2021-08-19 09:40:55 -04:00
9fec1ef120 Merge branch 'master' of https://kitsunehosting.net/gitea/Kenwood/dotfiles 2021-08-14 23:12:33 -04:00
5128c4738c Update gitlab to use gitlab ssh key 2021-08-14 23:12:08 -04:00
37a8a61735 Update localpath 2021-07-23 13:08:49 -04:00
5cd3789f0b Add new local bins path 2021-07-13 11:14:08 -04:00
95f92513e7 Add new plugin: virtualenv 2021-06-24 11:19:51 -04:00
d648575024 Merge https://kitsunehosting.net/gitea/Kenwood/dotfiles 2021-06-24 11:12:16 -04:00
a2ffeb7b85 Add new hosts 2021-06-24 11:11:21 -04:00
e46005a572 git may not be installed in alias dir on bsd unix 2021-06-18 16:21:51 -04:00
842a2b11dd Merge branch 'master' of https://kitsunehosting.net/gitea/Kenwood/dotfiles 2021-06-18 16:20:13 -04:00
8777394f78 Make zshrc functional on bsd + linux 2021-06-18 16:20:02 -04:00
04e6788a9d Update readme with missing bits 2021-06-17 18:11:50 +01:00
58c131d136 Upload Wallpapers 2021-06-13 14:33:42 -04:00
2458a02688 Plasmavaultrc update 2021-06-12 17:01:18 -04:00
9db5b36b47 Add nanorc 2021-06-10 15:28:41 -04:00
d274f1459e Fucking add fucking alias 2021-06-10 00:11:35 -04:00
0739e2a869 Add plasmavaultrc 2021-06-08 23:06:26 -04:00
3137156dd0 Fixup uwufetch config for konsole 2021-06-05 15:47:50 -04:00
24ce2ed255 Pick uwufetch image autmagically. 2021-06-04 12:55:20 -04:00
9479f344d2 Add uwufetch config to repo 2021-06-04 12:54:28 -04:00
b8d1e4e424 Add neofetch configto repo 2021-06-02 22:42:39 -04:00
221715e9fe Delete old readme 2021-06-02 22:16:25 -04:00
e66ab9f874 Cleanup ssh config a little more more. 2021-06-02 22:15:51 -04:00
b9f98b8e3a Cleanup ssh config a little more. 2021-06-02 22:15:06 -04:00
a347067273 Cleanup ssh config a little. 2021-06-02 22:10:29 -04:00
df71c06254 Added aur stuff. 2021-06-01 13:16:05 -04:00
41dcdf6bb5 Update readme again 2021-05-30 18:50:24 -04:00
c30f2f9185 Update readme 2021-05-30 18:49:15 -04:00
e53f5de1b8 Updated gitconfig 2021-05-30 18:10:48 -04:00
bf82c8933e Added gitconfig too 2021-05-30 18:09:48 -04:00
3e33db31e3 Renamed and made readme more standard. 2021-05-30 18:08:57 -04:00
37f1825fc3 SSH hosts config is important 2021-05-30 18:06:23 -04:00
14bda4adfb This works better, from hydronium 2021-05-30 16:30:07 -04:00
f46088a82e Update p10k.zsh using conf from lithium 2021-05-30 16:28:14 -04:00
7bd0d2c56d Merge pull request 'Sync p10k configs' (#2) from Compare-p10k-configs into master
Reviewed-on: https://kitsunehosting.net/gitea/Kenwood/dotfiles/pulls/2
2021-05-30 16:26:51 -04:00
b22c63a318 Add required git clone statements for omzsh plugins. 2021-05-30 02:39:15 -04:00
a540c12262 Checkout p10k configs to see if they should also be synced. 2021-05-29 23:38:26 -04:00
46 changed files with 7950 additions and 21 deletions

View File

@@ -1,17 +0,0 @@
# Clone repo
git clone --bare https://kitsunehosting.net/gitea/Kenwood/dotfiles.git $HOME/.dotfiles
# Make a temp alias (will be perminant via .zshrc)
alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
# Pull stuff down!
config checkout
# If things offend, backup or delete existing/differeing files.
# This could work but idk
mkdir -p .config-backup && \
config checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | \
xargs -I{} mv {} .config-backup/{}
# Also use this to keep it all neat!
config config --local status.showUntrackedFiles no

View File

@@ -0,0 +1,8 @@
# -*- coding: utf-8 -*-
# Macro Begin: /home/joe/.FreeCAD/Macro/DisableDominantMode.FCMacro +++++++++++++++++++++++++++++++++++++++++++++++++
import FreeCAD
# Gui.runCommand('Std_DlgMacroRecord',0)
# Gui.runCommand('Std_DlgCustomize',0)
# Macro End: /home/joe/.FreeCAD/Macro/DisableDominantMode.FCMacro +++++++++++++++++++++++++++++++++++++++++++++++++

View File

@@ -0,0 +1,8 @@
# -*- coding: utf-8 -*-
# Macro Begin: /home/joe/.FreeCAD/Macro/EnableDominantMode.FCMacro +++++++++++++++++++++++++++++++++++++++++++++++++
import FreeCAD
# Gui.runCommand('Std_DlgMacroRecord',0)
# Gui.runCommand('Std_DlgCustomize',0)
# Macro End: /home/joe/.FreeCAD/Macro/EnableDominantMode.FCMacro +++++++++++++++++++++++++++++++++++++++++++++++++

File diff suppressed because one or more lines are too long

3
.FreeCAD/Notes.md Normal file
View File

@@ -0,0 +1,3 @@
Diameter: ∅
Depth:
Counterbore: ⌴

View File

@@ -0,0 +1,14 @@
{
"version": 2,
"name": "1/8th Drill Bit",
"shape": "drill.fcstd",
"parameter": {
"Chipload": "0.000 in",
"Diameter": "0.125 in",
"Flutes": "0",
"Length": "0.750 in",
"Material": "HSS",
"TipAngle": "135.000 \u00b0"
},
"attribute": {}
}

View File

@@ -0,0 +1,16 @@
{
"version": 2,
"name": "3/16 Endmill",
"shape": "endmill.fcstd",
"parameter": {
"Chipload": "0.000 in",
"CuttingEdgeHeight": "0.600 \"",
"Diameter": "0.187 \"",
"Flutes": "0",
"Length": "1.500 \"",
"Material": "HSS",
"ShankDiameter": "0.315 \"",
"SpindleDirection": "Forward"
},
"attribute": {}
}

View File

@@ -0,0 +1,14 @@
{
"version": 2,
"name": "45 Deg. Chamfer",
"shape": "chamfer.fcstd",
"parameter": {
"CuttingEdgeAngle": "45.0000 \u00b0",
"CuttingEdgeHeight": "6.3500 mm",
"Diameter": "12.3323 mm",
"Length": "30.0000 mm",
"ShankDiameter": "6.3500 mm",
"TipDiameter": "5.0000 mm"
},
"attribute": {}
}

View File

@@ -0,0 +1,14 @@
{
"version": 2,
"name": "5mm-thread-cutter",
"shape": "thread-mill.fcstd",
"parameter": {
"Crest": "0.10 mm",
"Diameter": "5.00 mm",
"Length": "50.00 mm",
"NeckDiameter": "3.00 mm",
"NeckLength": "20.00 mm",
"ShankDiameter": "5.00 mm"
},
"attribute": {}
}

View File

@@ -0,0 +1,11 @@
{
"version": 2,
"name": "5mm Drill",
"shape": "drill.fcstd",
"parameter": {
"Diameter": "5.0000 mm",
"Length": "50.0000 mm",
"TipAngle": "119.0000 \u00b0"
},
"attribute": {}
}

View File

@@ -0,0 +1,12 @@
{
"version": 2,
"name": "5mm Endmill",
"shape": "endmill.fcstd",
"parameter": {
"CuttingEdgeHeight": "30.0000 mm",
"Diameter": "5.0000 mm",
"Length": "50.0000 mm",
"ShankDiameter": "3.0000 mm"
},
"attribute": {}
}

View File

@@ -0,0 +1,14 @@
{
"version": 2,
"name": "60 Deg. V-Bit",
"shape": "v-bit.fcstd",
"parameter": {
"CuttingEdgeAngle": "60.0000 \u00b0",
"Diameter": "10.0000 mm",
"CuttingEdgeHeight": "1.0000 mm",
"TipDiameter": "1.0000 mm",
"Length": "20.0000 mm",
"ShankDiameter": "5.0000 mm"
},
"attribute": {}
}

View File

@@ -0,0 +1,12 @@
{
"version": 2,
"name": "6mm Ball End",
"shape": "ballend.fcstd",
"parameter": {
"CuttingEdgeHeight": "40.0000 mm",
"Diameter": "6.0000 mm",
"Length": "50.0000 mm",
"ShankDiameter": "3.0000 mm"
},
"attribute": {}
}

View File

@@ -0,0 +1,13 @@
{
"version": 2,
"name": "6 mm Bull Nose",
"shape": "bullnose.fcstd",
"parameter": {
"CuttingEdgeHeight": "40.0000 mm",
"Diameter": "6.0000 mm",
"FlatRadius": "1.5000 mm",
"Length": "50.0000 mm",
"ShankDiameter": "3.0000 mm"
},
"attribute": {}
}

View File

@@ -0,0 +1,11 @@
{
"version": 2,
"name": "Probe",
"shape": "probe.fcstd",
"parameter": {
"Diameter": "6.0000 mm",
"Length": "50.0000 mm",
"ShaftDiameter": "4.0000 mm"
},
"attribute": {}
}

View File

@@ -0,0 +1,16 @@
{
"version": 2,
"name": "Single Flute 1/8th inch endmill",
"shape": "endmill.fcstd",
"parameter": {
"Chipload": "0.000 in",
"CuttingEdgeHeight": "0.600 \"",
"Diameter": "0.125 \"",
"Flutes": "0",
"Length": "1.000 \"",
"Material": "HSS",
"ShankDiameter": "0.315 \"",
"SpindleDirection": "Forward"
},
"attribute": {}
}

View File

@@ -0,0 +1,14 @@
{
"version": 2,
"name": "Slitting Saw",
"shape": "slittingsaw.fcstd",
"parameter": {
"BladeThickness": "3.0000 mm",
"CapHeight": "3.0000 mm",
"CapDiameter": "8.0000 mm",
"Diameter": "76.2000 mm",
"Length": "50.0000 mm",
"ShankDiameter": "19.0500 mm"
},
"attribute": {}
}

View File

@@ -0,0 +1,41 @@
{
"tools": [
{
"nr": 1,
"path": "5mm_Endmill.fctb"
},
{
"nr": 2,
"path": "5mm_Drill.fctb"
},
{
"nr": 3,
"path": "6mm_Ball_End.fctb"
},
{
"nr": 4,
"path": "6mm_Bullnose.fctb"
},
{
"nr": 5,
"path": "60degree_Vbit.fctb"
},
{
"nr": 6,
"path": "45degree_chamfer.fctb"
},
{
"nr": 7,
"path": "slittingsaw.fctb"
},
{
"nr": 8,
"path": "probe.fctb"
},
{
"nr": 9,
"path": "5mm-thread-cutter.fctb"
}
],
"version": 1
}

View File

@@ -0,0 +1,13 @@
{
"tools": [
{
"nr": 1,
"path": "125_Drill.fctb"
},
{
"nr": 2,
"path": "singleFlute8th_Endmill.fctb"
}
],
"version": 1
}

View File

@@ -0,0 +1,88 @@
# Tools
Each tool is stored as a JSON file which has the shape's path and values for all attributes of the shape.
It also includes all additional parameters and their values.
Storing a tool as a JSON file sounds great but eliminates the option of an accurate thumbnail. On the other hand,
storing each tool as a `*.fcstd` file requires more space and does not allow for generating tools. If one has an
extensive tool aresenal they might want to script the generation of tools which is easily done for a `*.json` file but
practically impossible for `*.fcstd` files.
When a tool is instantiated in a job the PDN body is created from the shape and the attributes and constraints are set
according to the values from the JSON file. All additional parameters are created as properties on the object. This
provides the correct shape and dimensions which can be used to generate a point cloud or mesh for advanced
algorithms (and potentially simulation).
# Tool Libraries
Due to each tool being stored in its own file and the storage/organization of those files being quite flexible the
importance of a tool library for organisational purposes is quite diminished. The user is free to organise their tools
in whichever directory hierarchy they see fit and can also name them as best fits their use and organisation. A
_tool library_ is nevertheless a great representation for a physical grouping of tools, such as in an automatic tool
changer.
A tool library is a (JSON) file with a mapping of tool id to the path of the tool file. As a consequence each tool
can be in multiple libraries and doesn't have an `id` of it's own. The `id` is a property of the library.
If a tool from a tool library (or an entire tool library) is added to a job it retains its `id` from the library as a
property. Adding a tool bit directly rsults in the tool getting the next free id assigned.
# Tool Controllers
They largely stay the same as they are today. As an additional feature it should be possible to _copy_ a TC, which
allows for easy feed/speed changes for the same tool.
Above requirement highlights one change though, that the `id` should be a property of the Bit, and not of the TC.
There are two requirements that are currently mapped to a single `id`. There needs to be an identification of which
TC is being used by a certain op, and which tool number to use for a `M6` command.
# Paths and Extensibility
The following directory structure is used for supplied (shipped with FreeCAD) tools:
```
Tools
+ Bit
+ Library
+ Shape
```
Strictly speaking a user is free to store their tools wherever they want and however they want. By default the file
dialog will open the corresponding directory (depending on context), or whichever directory the user opened last.
Above directory structure with the most common default tools shipped with FreeCAD should be installed analogous to
TechDraw's templates.
## How to create a new tool
1. Set the tool's Label, this will show up in the object tree
1. Select a tool shape from the existing shape files. If your tool doesn't exist, you'll have to create a new shape,
see below for details.
1. Each tool bit shape has its own set of parameters, fill them with the tool's values.
1. Select additional parameters
1. Save the tool under path/file that makes sense to you
## How to create a new tool bit Shape
The shape file for a tool bit is expected to contain a PD body which represents the tool as a 3d solid. The PD body
should be parametric based on a PropertyBag object so that, when the properties of the PropertyBag are changed the
solid is updated to the correct representation.
1. Create a new FreeCAD document
1. Open the `PartDesign` workbench, create a body and give the body a label you want to show up in the bit selection.
1. Open the Path workbench and (with the PD body selected) create a PropertyBag,
menu 'Path' -> 'Utils' -> 'Property Bag'
* this creates a PropertyBag object inside the Body (assuming it was selected)
* add properties to which define the tool bit's shape and put those into the group 'Shape'
* add any other properties to the bag which might be useful for the tool bit
1. Construct the body of the tool bit and assign expressions referencing properties from the PropertyBag (in the
`Shape` Group) for all constraints.
* Position the tip of the tool bit on the origin (0,0)
1. Save the document as a new file in the Shape directory
* Before saving the document make sure you have _Save Thumbnail_ selected, and _Add program logo_ deselected in
FreeCAD's preferences.
* Also make sure to switch to _Front View_ and _Fit content to screen_
* Whatever you see when saving the document will end up being the visual representation of tool bits with this shape
Not that 'Shape' is the only property group which has special meaning for tool bits. All other property groups are
copied verbatim to the ToolBit object when one is created.

1
.config/nano/nanorc Normal file
View File

@@ -0,0 +1 @@
include "/usr/share/nano/*.nanorc"

View File

@@ -0,0 +1,864 @@
# See this wiki page for more info:
# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
print_info() {
info title
info underline
info "OS" distro
info "Host" model
info "Kernel" kernel
info "Uptime" uptime
info "Packages" packages
info "Shell" shell
info "Resolution" resolution
info "DE" de
info "WM" wm
info "WM Theme" wm_theme
info "Theme" theme
info "Icons" icons
info "Terminal" term
info "Terminal Font" term_font
info "CPU" cpu
info "GPU" gpu
info "Memory" memory
info "GPU Driver" gpu_driver # Linux/macOS only
# info "CPU Usage" cpu_usage
# info "Disk" disk
# info "Battery" battery
# info "Font" font
# info "Song" song
# [[ "$player" ]] && prin "Music Player" "$player"
# info "Local IP" local_ip
# info "Public IP" public_ip
# info "Users" users
# info "Locale" locale # This only works on glibc systems.
info cols
}
# Title
# Hide/Show Fully qualified domain name.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --title_fqdn
title_fqdn="off"
# Kernel
# Shorten the output of the kernel function.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --kernel_shorthand
# Supports: Everything except *BSDs (except PacBSD and PC-BSD)
#
# Example:
# on: '4.8.9-1-ARCH'
# off: 'Linux 4.8.9-1-ARCH'
kernel_shorthand="on"
# Distro
# Shorten the output of the distro function
#
# Default: 'off'
# Values: 'on', 'tiny', 'off'
# Flag: --distro_shorthand
# Supports: Everything except Windows and Haiku
distro_shorthand="off"
# Show/Hide OS Architecture.
# Show 'x86_64', 'x86' and etc in 'Distro:' output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --os_arch
#
# Example:
# on: 'Arch Linux x86_64'
# off: 'Arch Linux'
os_arch="on"
# Uptime
# Shorten the output of the uptime function
#
# Default: 'on'
# Values: 'on', 'tiny', 'off'
# Flag: --uptime_shorthand
#
# Example:
# on: '2 days, 10 hours, 3 mins'
# tiny: '2d 10h 3m'
# off: '2 days, 10 hours, 3 minutes'
uptime_shorthand="on"
# Memory
# Show memory pecentage in output.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --memory_percent
#
# Example:
# on: '1801MiB / 7881MiB (22%)'
# off: '1801MiB / 7881MiB'
memory_percent="off"
# Change memory output unit.
#
# Default: 'mib'
# Values: 'kib', 'mib', 'gib'
# Flag: --memory_unit
#
# Example:
# kib '1020928KiB / 7117824KiB'
# mib '1042MiB / 6951MiB'
# gib: ' 0.98GiB / 6.79GiB'
memory_unit="mib"
# Packages
# Show/Hide Package Manager names.
#
# Default: 'tiny'
# Values: 'on', 'tiny' 'off'
# Flag: --package_managers
#
# Example:
# on: '998 (pacman), 8 (flatpak), 4 (snap)'
# tiny: '908 (pacman, flatpak, snap)'
# off: '908'
package_managers="on"
# Shell
# Show the path to $SHELL
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --shell_path
#
# Example:
# on: '/bin/bash'
# off: 'bash'
shell_path="off"
# Show $SHELL version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --shell_version
#
# Example:
# on: 'bash 4.4.5'
# off: 'bash'
shell_version="on"
# CPU
# CPU speed type
#
# Default: 'bios_limit'
# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'.
# Flag: --speed_type
# Supports: Linux with 'cpufreq'
# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value.
speed_type="bios_limit"
# CPU speed shorthand
#
# Default: 'off'
# Values: 'on', 'off'.
# Flag: --speed_shorthand
# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz
#
# Example:
# on: 'i7-6500U (4) @ 3.1GHz'
# off: 'i7-6500U (4) @ 3.100GHz'
speed_shorthand="off"
# Enable/Disable CPU brand in output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_brand
#
# Example:
# on: 'Intel i7-6500U'
# off: 'i7-6500U (4)'
cpu_brand="on"
# CPU Speed
# Hide/Show CPU speed.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_speed
#
# Example:
# on: 'Intel i7-6500U (4) @ 3.1GHz'
# off: 'Intel i7-6500U (4)'
cpu_speed="on"
# CPU Cores
# Display CPU cores in output
#
# Default: 'logical'
# Values: 'logical', 'physical', 'off'
# Flag: --cpu_cores
# Support: 'physical' doesn't work on BSD.
#
# Example:
# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores)
# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores)
# off: 'Intel i7-6500U @ 3.1GHz'
cpu_cores="logical"
# CPU Temperature
# Hide/Show CPU temperature.
# Note the temperature is added to the regular CPU function.
#
# Default: 'off'
# Values: 'C', 'F', 'off'
# Flag: --cpu_temp
# Supports: Linux, BSD
# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable
# coretemp kernel module. This only supports newer Intel processors.
#
# Example:
# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]'
# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]'
# off: 'Intel i7-6500U (4) @ 3.1GHz'
cpu_temp="off"
# GPU
# Enable/Disable GPU Brand
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gpu_brand
#
# Example:
# on: 'AMD HD 7950'
# off: 'HD 7950'
gpu_brand="on"
# Which GPU to display
#
# Default: 'all'
# Values: 'all', 'dedicated', 'integrated'
# Flag: --gpu_type
# Supports: Linux
#
# Example:
# all:
# GPU1: AMD HD 7950
# GPU2: Intel Integrated Graphics
#
# dedicated:
# GPU1: AMD HD 7950
#
# integrated:
# GPU1: Intel Integrated Graphics
gpu_type="all"
# Resolution
# Display refresh rate next to each monitor
# Default: 'off'
# Values: 'on', 'off'
# Flag: --refresh_rate
# Supports: Doesn't work on Windows.
#
# Example:
# on: '1920x1080 @ 60Hz'
# off: '1920x1080'
refresh_rate="off"
# Gtk Theme / Icons / Font
# Shorten output of GTK Theme / Icons / Font
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --gtk_shorthand
#
# Example:
# on: 'Numix, Adwaita'
# off: 'Numix [GTK2], Adwaita [GTK3]'
gtk_shorthand="off"
# Enable/Disable gtk2 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk2
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Adwaita [GTK3]'
gtk2="on"
# Enable/Disable gtk3 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk3
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Numix [GTK2]'
gtk3="on"
# IP Address
# Website to ping for the public IP
#
# Default: 'http://ident.me'
# Values: 'url'
# Flag: --ip_host
public_ip_host="http://ident.me"
# Public IP timeout.
#
# Default: '2'
# Values: 'int'
# Flag: --ip_timeout
public_ip_timeout=2
# Desktop Environment
# Show Desktop Environment version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --de_version
de_version="on"
# Disk
# Which disks to display.
# The values can be any /dev/sdXX, mount point or directory.
# NOTE: By default we only show the disk info for '/'.
#
# Default: '/'
# Values: '/', '/dev/sdXX', '/path/to/drive'.
# Flag: --disk_show
#
# Example:
# disk_show=('/' '/dev/sdb1'):
# 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 823G / 893G (93%)'
#
# disk_show=('/'):
# 'Disk (/): 74G / 118G (66%)'
#
disk_show=('/')
# Disk subtitle.
# What to append to the Disk subtitle.
#
# Default: 'mount'
# Values: 'mount', 'name', 'dir', 'none'
# Flag: --disk_subtitle
#
# Example:
# name: 'Disk (/dev/sda1): 74G / 118G (66%)'
# 'Disk (/dev/sdb2): 74G / 118G (66%)'
#
# mount: 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Local Disk): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 74G / 118G (66%)'
#
# dir: 'Disk (/): 74G / 118G (66%)'
# 'Disk (Local Disk): 74G / 118G (66%)'
# 'Disk (Videos): 74G / 118G (66%)'
#
# none: 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
disk_subtitle="mount"
# Disk percent.
# Show/Hide disk percent.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --disk_percent
#
# Example:
# on: 'Disk (/): 74G / 118G (66%)'
# off: 'Disk (/): 74G / 118G'
disk_percent="on"
# Song
# Manually specify a music player.
#
# Default: 'auto'
# Values: 'auto', 'player-name'
# Flag: --music_player
#
# Available values for 'player-name':
#
# amarok
# audacious
# banshee
# bluemindo
# clementine
# cmus
# deadbeef
# deepin-music
# dragon
# elisa
# exaile
# gnome-music
# gmusicbrowser
# gogglesmm
# guayadeque
# io.elementary.music
# iTunes
# juk
# lollypop
# mocp
# mopidy
# mpd
# muine
# netease-cloud-music
# olivia
# playerctl
# pogo
# pragha
# qmmp
# quodlibet
# rhythmbox
# sayonara
# smplayer
# spotify
# strawberry
# tauonmb
# tomahawk
# vlc
# xmms2d
# xnoise
# yarock
music_player="auto"
# Format to display song information.
#
# Default: '%artist% - %album% - %title%'
# Values: '%artist%', '%album%', '%title%'
# Flag: --song_format
#
# Example:
# default: 'Song: Jet - Get Born - Sgt Major'
song_format="%artist% - %album% - %title%"
# Print the Artist, Album and Title on separate lines
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --song_shorthand
#
# Example:
# on: 'Artist: The Fratellis'
# 'Album: Costello Music'
# 'Song: Chelsea Dagger'
#
# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger'
song_shorthand="off"
# 'mpc' arguments (specify a host, password etc).
#
# Default: ''
# Example: mpc_args=(-h HOST -P PASSWORD)
mpc_args=()
# Text Colors
# Text Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --colors
#
# Each number represents a different part of the text in
# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info'
#
# Example:
# colors=(distro) - Text is colored based on Distro colors.
# colors=(4 6 1 8 8 6) - Text is colored in the order above.
colors=(distro)
# Text Options
# Toggle bold text
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bold
bold="on"
# Enable/Disable Underline
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --underline
underline_enabled="on"
# Underline character
#
# Default: '-'
# Values: 'string'
# Flag: --underline_char
underline_char="-"
# Info Separator
# Replace the default separator with the specified string.
#
# Default: ':'
# Flag: --separator
#
# Example:
# separator="->": 'Shell-> bash'
# separator=" =": 'WM = dwm'
separator=":"
# Color Blocks
# Color block range
# The range of colors to print.
#
# Default: '0', '15'
# Values: 'num'
# Flag: --block_range
#
# Example:
#
# Display colors 0-7 in the blocks. (8 colors)
# neofetch --block_range 0 7
#
# Display colors 0-15 in the blocks. (16 colors)
# neofetch --block_range 0 15
block_range=(0 15)
# Toggle color blocks
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --color_blocks
color_blocks="on"
# Color block width in spaces
#
# Default: '3'
# Values: 'num'
# Flag: --block_width
block_width=3
# Color block height in lines
#
# Default: '1'
# Values: 'num'
# Flag: --block_height
block_height=1
# Color Alignment
#
# Default: 'auto'
# Values: 'auto', 'num'
# Flag: --col_offset
#
# Number specifies how far from the left side of the terminal (in spaces) to
# begin printing the columns, in case you want to e.g. center them under your
# text.
# Example:
# col_offset="auto" - Default behavior of neofetch
# col_offset=7 - Leave 7 spaces then print the colors
col_offset="auto"
# Progress Bars
# Bar characters
#
# Default: '-', '='
# Values: 'string', 'string'
# Flag: --bar_char
#
# Example:
# neofetch --bar_char 'elapsed' 'total'
# neofetch --bar_char '-' '='
bar_char_elapsed="-"
bar_char_total="="
# Toggle Bar border
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bar_border
bar_border="on"
# Progress bar length in spaces
# Number of chars long to make the progress bars.
#
# Default: '15'
# Values: 'num'
# Flag: --bar_length
bar_length=15
# Progress bar colors
# When set to distro, uses your distro's logo colors.
#
# Default: 'distro', 'distro'
# Values: 'distro', 'num'
# Flag: --bar_colors
#
# Example:
# neofetch --bar_colors 3 4
# neofetch --bar_colors distro 5
bar_color_elapsed="distro"
bar_color_total="distro"
# Info display
# Display a bar with the info.
#
# Default: 'off'
# Values: 'bar', 'infobar', 'barinfo', 'off'
# Flags: --cpu_display
# --memory_display
# --battery_display
# --disk_display
#
# Example:
# bar: '[---=======]'
# infobar: 'info [---=======]'
# barinfo: '[---=======] info'
# off: 'info'
cpu_display="off"
memory_display="off"
battery_display="off"
disk_display="off"
# Backend Settings
# Image backend.
#
# Default: 'ascii'
# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off',
# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty'
# Flag: --backend
image_backend="ascii"
# Image Source
#
# Which image or ascii file to display.
#
# Default: 'auto'
# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/'
# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")'
# Flag: --source
#
# NOTE: 'auto' will pick the best image source for whatever image backend is used.
# In ascii mode, distro ascii art will be used and in an image mode, your
# wallpaper will be used.
image_source="auto"
# Ascii Options
# Ascii distro
# Which distro's ascii art to display.
#
# Default: 'auto'
# Values: 'auto', 'distro_name'
# Flag: --ascii_distro
# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, "AOSC OS",
# "AOSC OS/Retro", Apricity, ArcoLinux, ArchBox, ARCHlabs,
# ArchStrike, XFerience, ArchMerge, Arch, Artix, Arya, Bedrock,
# Bitrig, BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD,
# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS,
# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover,
# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin,
# DesaOS, Devuan, DracOS, DarkOs, DragonFly, Drauger, Elementary,
# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD,
# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo,
# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra,
# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion,
# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite,
# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva,
# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib,
# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner,
# NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, openmamba,
# OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, OS Elbrus, PacBSD,
# Parabola, Pardus, Parrot, Parsix, TrueOS, PCLinuxOS, Peppermint,
# popos, Porteus, PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix,
# Raspbian, Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan,
# Regata, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific,
# Septor, SereneLinux, SharkLinux, Siduction, Slackware, SliTaz,
# SmartOS, Solus, Source_Mage, Sparky, Star, SteamOS, SunOS,
# openSUSE_Leap, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails,
# Trisquel, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio,
# Ubuntu, Venom, Void, Obarun, windows10, Windows7, Xubuntu, Zorin,
# and IRIX have ascii logos
# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants.
# Use '{distro name}_old' to use the old logos.
# NOTE: Ubuntu has flavor variants.
# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME,
# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors.
# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu,
# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android,
# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola,
# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS,
# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian,
# postmarketOS, and Void have a smaller logo variant.
# Use '{distro name}_small' to use the small variants.
ascii_distro="auto"
# Ascii Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --ascii_colors
#
# Example:
# ascii_colors=(distro) - Ascii is colored based on Distro colors.
# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors.
ascii_colors=(distro)
# Bold ascii logo
# Whether or not to bold the ascii logo.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --ascii_bold
ascii_bold="on"
# Image Options
# Image loop
# Setting this to on will make neofetch redraw the image constantly until
# Ctrl+C is pressed. This fixes display issues in some terminal emulators.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --loop
image_loop="off"
# Thumbnail directory
#
# Default: '~/.cache/thumbnails/neofetch'
# Values: 'dir'
thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"
# Crop mode
#
# Default: 'normal'
# Values: 'normal', 'fit', 'fill'
# Flag: --crop_mode
#
# See this wiki page to learn about the fit and fill options.
# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F
crop_mode="normal"
# Crop offset
# Note: Only affects 'normal' crop mode.
#
# Default: 'center'
# Values: 'northwest', 'north', 'northeast', 'west', 'center'
# 'east', 'southwest', 'south', 'southeast'
# Flag: --crop_offset
crop_offset="center"
# Image size
# The image is half the terminal width by default.
#
# Default: 'auto'
# Values: 'auto', '00px', '00%', 'none'
# Flags: --image_size
# --size
image_size="auto"
# Gap between image and text
#
# Default: '3'
# Values: 'num', '-num'
# Flag: --gap
gap=3
# Image offsets
# Only works with the w3m backend.
#
# Default: '0'
# Values: 'px'
# Flags: --xoffset
# --yoffset
yoffset=0
xoffset=0
# Image background color
# Only works with the w3m backend.
#
# Default: ''
# Values: 'color', 'blue'
# Flag: --bg_color
background_color=
# Misc Options
# Stdout mode
# Turn off all colors and disables image backend (ASCII/Image).
# Useful for piping into another command.
# Default: 'off'
# Values: 'on', 'off'
stdout="off"

28
.config/nvim/init.vim Normal file
View File

@@ -0,0 +1,28 @@
set number
syntax on
set expandtab shiftwidth=4 tabstop=4
set autoindent
set clipboard=unnamedplus
" I want nvim using a venv for plugins and stuff
let g:python3_host_prog = expand('~/.venvs/nvim/bin/python')
" Plugins with vim-plug
call plug#begin('~/.vim/plugged')
Plug 'psf/black', { 'do': ':!pip install black' }
Plug 'dense-analysis/ale' " For linting and format-on-save
Plug 'vim-python/python-syntax' " Improved Python syntax highlighting
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " Fuzzy finder
Plug 'junegunn/fzf.vim'
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} " Better syntax
call plug#end()
" Enable ALE for linting and formatting
let g:ale_fix_on_save = 1
let g:ale_linters = { 'python': ['flake8'] }
let g:ale_fixers = { 'python': ['black'] }
" Keybindings
nnoremap <leader>f :Files<CR> " Fuzzy file search

View File

@@ -0,0 +1,2 @@
# LaTeX Import path
export TEXINPUTS=/home/joe/College/SNHU/LaTeX:$(kpsepath tex | tr ':' '\n' | head -n 1):

14
.config/uwufetch/config Normal file
View File

@@ -0,0 +1,14 @@
#distro=manjaro
#image=“/usr/lib/uwufetch/manjaro.png”
ascii=true
user=true
os=true
kernel=true
cpu=true
gpu=true
ram=true
resolution=true
shell=true
pkgs=true
uptime=true
colors=true

36
.gitconfig Normal file
View File

@@ -0,0 +1,36 @@
[user]
email = joe@kitsunehosting.net
name = KenwoodFox
signingkey = DD5E787D6C678F3F64
[alias]
add-commit = !git add -A && git commit
report = log --author=J --since='2 sunday ago' --until='1 sunday ago' --format='%Cgreen%ci%Creset %s%Creset' --no-merges
report-csv = log --author=Marco --since='2 sunday ago' --until='1 sunday ago' --format='\"%ci\",\"%s\"' --no-merges
lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all
lg = !"git lg1"
[credential]
helper = store
[global]
[push]
default = current
autoSetupRemote = true
[init]
defaultBranch = main
[pull]
rebase = false
[branch]
autosetuprebase = always
[safe]
directory = /opt/flutter
[protocol "file"]
allow = always
[filter "lfs"]
required = true
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
[diff "fcinfo"]
textconv = ~/.local/bin/fcinfo
[core]
hooksPath = /home/joe/.githooks

44
.githooks/pre-commit Executable file
View File

@@ -0,0 +1,44 @@
#!/bin/sh
# Global pre-commit hook: print effective identity and ask to continue.
# Set BYPASS_COMMIT_IDENTITY_CHECK=1 to skip (e.g., in CI).
[ -n "$BYPASS_COMMIT_IDENTITY_CHECK" ] && exit 0
# Resolve effective identity (prefer repo-local config, fall back to global)
name="$(git config --get user.name)"
[ -z "$name" ] && name="$(git config --global --get user.name)"
email="$(git config --get user.email)"
[ -z "$email" ] && email="$(git config --global --get user.email)"
branch="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo '?')"
remote="$(git remote -v | awk '/\(push\)/{print $2; exit}' | sed 's#^https\?://##; s#git@##' )"
# Optional: block specific identities unless overridden
# Add your alt(s) here, comma-separated (exact match on email or name).
BLOCKED_EMAILS="${BLOCKED_EMAILS:-alt@example.com}"
BLOCKED_NAMES="${BLOCKED_NAMES:-Alt Name}"
is_blocked() {
needle="$1" haystack="$2"
printf '%s' "$haystack" | tr ',' '\n' | grep -Fxq "$needle"
}
printf '\n\033[1;33m⚠ Committing as:\033[0m \033[1m%s\033[0m <\033[1m%s\033[0m>\n' "$name" "$email"
[ -n "$branch" ] && printf ' Branch: %s\n' "$branch"
[ -n "$remote" ] && printf ' Remote: %s\n' "$remote"
printf ' Double-check this is the right account.\n\n'
if is_blocked "$email" "$BLOCKED_EMAILS" || is_blocked "$name" "$BLOCKED_NAMES"; then
printf '\033[1;31mBlocked identity detected.\033[0m Set BYPASS_COMMIT_IDENTITY_CHECK=1 to override just this commit.\n'
exit 1
fi
# Interactive confirm (skip if no TTY, e.g., merge drivers)
if [ -t 0 ]; then
printf 'Continue with commit? [y/N] '
read ans
case "$ans" in
y|Y) ;;
*) echo "Commit aborted."; exit 1 ;;
esac
fi

187
.local/bin/computer Executable file
View File

@@ -0,0 +1,187 @@
#!/usr/bin/env python3
# Joe wrote this :P
import argparse
import json
import os
import re
import subprocess
import sys
import urllib.error
import urllib.request
try:
from rich.console import Console
from rich.markdown import Markdown
RICH = True
except ImportError:
RICH = False
FAST_MODEL = "gemma3:4b"
THINK_MODEL = "qwen3:4b"
ANSI_ESCAPE = re.compile(r"\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])")
SYSTEM_PROMPT = """
You are Computer.
Rules:
- Respond in under 100 words unless asked for detail.
- Prefer direct answers.
- Use technical language.
- Do not apologize.
- For Linux questions assume Arch Linux.
- For electronics questions assume the user is an engineer.
- If providing a command, put the command first.
- Do not explain your reasoning unless explicitly asked.
- Do not show chain-of-thought.
- Give final answers only.
""".strip()
def ollama_base_url():
host = os.environ.get("OLLAMA_HOST", "127.0.0.1:11434").strip()
if host.startswith(("http://", "https://")):
return host.rstrip("/")
return f"http://{host}".rstrip("/")
def strip_ansi(text):
return ANSI_ESCAPE.sub("", text)
def copy_to_clipboard(text):
commands = [
["wl-copy"],
["xclip", "-selection", "clipboard"],
["xsel", "--clipboard", "--input"],
]
for cmd in commands:
try:
subprocess.run(
cmd,
input=text,
text=True,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
check=True,
)
return True
except Exception:
pass
return False
def run_ollama_api(model, prompt):
url = f"{ollama_base_url()}/api/generate"
payload = json.dumps(
{
"model": model,
"prompt": prompt,
"stream": False,
}
).encode()
req = urllib.request.Request(
url,
data=payload,
headers={"Content-Type": "application/json"},
method="POST",
)
with urllib.request.urlopen(req, timeout=600) as resp:
data = json.load(resp)
return strip_ansi(data.get("response", "")).strip()
def run_ollama_cli(model, prompt):
result = subprocess.run(
["ollama", "run", model, prompt],
capture_output=True,
text=True,
)
if result.returncode != 0:
err = (result.stderr or result.stdout or "ollama run failed").strip()
raise RuntimeError(err)
return strip_ansi(result.stdout).strip()
def run_ollama(model, prompt):
try:
return run_ollama_api(model, prompt)
except (urllib.error.URLError, TimeoutError, json.JSONDecodeError) as exc:
print(f"computer: API unavailable ({exc}), using CLI", file=sys.stderr)
return run_ollama_cli(model, prompt)
def print_response(response, raw):
if RICH and not raw:
console = Console()
console.print(Markdown(response))
else:
print(response)
def main():
parser = argparse.ArgumentParser(
prog="computer",
description="Tiny local terminal AI",
)
parser.add_argument(
"--think",
action="store_true",
help="Use the larger reasoning model",
)
parser.add_argument(
"--copy",
action="store_true",
help="Copy response to clipboard",
)
parser.add_argument(
"--raw",
action="store_true",
help="Disable rich formatting",
)
parser.add_argument(
"prompt",
nargs="*",
help="Prompt text",
)
args = parser.parse_args()
model = THINK_MODEL if args.think else FAST_MODEL
user_prompt = " ".join(args.prompt)
stdin_text = ""
if not sys.stdin.isatty():
stdin_text = sys.stdin.read()
prompt = f"{SYSTEM_PROMPT}\n\nUser:\n{user_prompt}"
if stdin_text.strip():
prompt += f"\n\nInput:\n{stdin_text}"
try:
response = run_ollama(model, prompt)
except RuntimeError as exc:
print(f"computer: {exc}", file=sys.stderr)
sys.exit(1)
if args.copy:
copy_to_clipboard(response)
print_response(response, args.raw)
if __name__ == "__main__":
main()

8
.local/bin/describe Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
# Just to make it easy to always get the same
# version description,
# Usage:
# ./describe.sh
git describe --abbrev=8 --always --tags

82
.local/bin/discompress Executable file
View File

@@ -0,0 +1,82 @@
#!/bin/bash
#
# Re-encode a video to a target size in MB.
# Example:
# ./this_script.sh video.mp4 15
T_SIZE="$2" # target size in MB
T_FILE="${1%.*}-$2MB.mp4" # filename out
# Original duration in seconds
O_DUR=$(\
ffprobe \
-v error \
-show_entries format=duration \
-of csv=p=0 "$1")
# Original audio rate
O_ARATE=$(\
ffprobe \
-v error \
-select_streams a:0 \
-show_entries stream=bit_rate \
-of csv=p=0 "$1")
# Original audio rate in KiB/s
O_ARATE=$(\
awk \
-v arate="$O_ARATE" \
'BEGIN { printf "%.0f", (arate / 1024) }')
# Target size is required to be less than the size of the original audio stream
T_MINSIZE=$(\
awk \
-v arate="$O_ARATE" \
-v duration="$O_DUR" \
'BEGIN { printf "%.2f", ( (arate * duration) / 8192 ) }')
# Equals 1 if target size is ok, 0 otherwise
IS_MINSIZE=$(\
awk \
-v size="$T_SIZE" \
-v minsize="$T_MINSIZE" \
'BEGIN { print (minsize < size) }')
# Give useful information if size is too small
if [[ $IS_MINSIZE -eq 0 ]]; then
printf "%s\n" "Target size ${T_SIZE}MB is too small!" >&2
printf "%s %s\n" "Try values larger than" "${T_MINSIZE}MB" >&2
exit 1
fi
# Set target audio bitrate
T_ARATE=$O_ARATE
# Calculate target video rate - MB -> KiB/s
T_VRATE=$(\
awk \
-v size="$T_SIZE" \
-v duration="$O_DUR" \
-v audio_rate="$O_ARATE" \
'BEGIN { print ( ( size * 8192.0 ) / ( 1.048576 * duration ) - audio_rate) }')
# Perform the conversion
ffmpeg \
-y \
-i "$1" \
-c:v libx264 \
-b:v "$T_VRATE"k \
-pass 1 \
-an \
-f mp4 \
/dev/null \
&& \
ffmpeg \
-i "$1" \
-c:v libx264 \
-b:v "$T_VRATE"k \
-pass 2 \
-c:a aac \
-b:a "$T_ARATE"k \
$T_FILE

293
.local/bin/fcinfo Executable file
View File

@@ -0,0 +1,293 @@
#!/usr/bin/python3
# -*- coding: utf8 -*-
# ***************************************************************************
# * *
# * Copyright (c) 2015 Yorik van Havre <yorik@uncreated.net> *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
__title__ = "FreeCAD File info utility"
__author__ = "Yorik van Havre"
__url__ = ["http://www.freecad.org"]
__doc__ = """
This utility prints information about a given FreeCAD file (*.FCStd)
on screen, including document properties, number of included objects,
object sizes and properties and values. Its main use is to compare
two files and be able to see the differences in a text-based form.
If no option is used, fcinfo prints the document properties and a list
of properties of each object found in the given file.
Usage:
fcinfo [options] myfile.FCStd
Options:
-h, --help: Prints this help text
-s, --short: Do not print object properties. Only one line
per object is printed, including its size and SHA1.
This is sufficient to see that an object has
changed, but not what exactly has changed.
-vs --veryshort: Only prints the document info, not objects info.
This is sufficient to see if a file has changed, as
its SHA1 code and timestamp will show it. But won't
show details of what has changed.
-g --gui: Adds visual properties too (if not using -s or -vs)
Git usage:
This script can be used as a textconv tool for git diff by
configuring your git folder as follows:
1) add to .gitattributes (or ~/.gitattributes for user-wide):
*.fcstd diff=fcinfo
2) add to .git/config (or ~/.gitconfig for user-wide):
[diff "fcinfo"]
textconv = /path/to/fcinfo
With this, when committing a .FCStd file with Git,
'git diff' will show you the difference between the two
texts obtained by fcinfo
"""
import sys
import zipfile
import xml.sax
import os
import hashlib
import re
class FreeCADFileHandler(xml.sax.ContentHandler):
def __init__(self, zfile, short=0): # short: 0=normal, 1=short, 2=veryshort
xml.sax.ContentHandler.__init__(self)
self.zfile = zfile
self.obj = None
self.prop = None
self.count = "0"
self.contents = {}
self.short = short
def startElement(self, tag, attributes):
if tag == "Document":
self.obj = tag
self.contents = {}
self.contents["ProgramVersion"] = attributes["ProgramVersion"]
self.contents["FileVersion"] = attributes["FileVersion"]
elif tag == "Object":
if "name" in attributes:
name = self.clean(attributes["name"])
self.obj = name
if "type" in attributes:
self.contents[name] = attributes["type"]
elif tag == "ViewProvider":
if "name" in attributes:
self.obj = self.clean(attributes["name"])
elif tag == "Part":
if self.obj:
r = self.zfile.read(attributes["file"])
s = r.__sizeof__()
if s < 1024:
s = str(s) + "B"
elif s > 1048576:
s = str(s / 1048576) + "M"
else:
s = str(s / 1024) + "K"
s += " " + str(hashlib.sha1(r).hexdigest()[:12])
self.contents[self.obj] += " (" + s + ")"
elif tag == "Property":
self.prop = None
# skip "internal" properties, useless for a diff
if attributes["name"] not in [
"Symbol",
"AttacherType",
"MapMode",
"MapPathParameter",
"MapReversed",
"AttachmentOffset",
"SelectionStyle",
"TightGrid",
"GridSize",
"GridSnap",
"GridStyle",
"Lighting",
"Deviation",
"AngularDeflection",
"BoundingBox",
"Selectable",
"ShowGrid",
]:
self.prop = attributes["name"]
elif tag in ["String", "Uuid", "Float", "Integer", "Bool", "Link"]:
if self.prop and ("value" in attributes):
if self.obj == "Document":
self.contents[self.prop] = attributes["value"]
elif self.short == 0:
if tag == "Float":
self.contents[self.obj + "00000000::" + self.prop] = str(
float(attributes["value"])
)
else:
self.contents[self.obj + "00000000::" + self.prop] = attributes["value"]
elif tag in ["PropertyVector"]:
if self.prop and self.obj and (self.short == 0):
val = (
"("
+ str(float(attributes["valueX"]))
+ ","
+ str(float(attributes["valueY"]))
+ ","
+ str(float(attributes["valueZ"]))
+ ")"
)
self.contents[self.obj + "00000000::" + self.prop] = val
elif tag in ["PropertyPlacement"]:
if self.prop and self.obj and (self.short == 0):
val = (
"("
+ str(float(attributes["Px"]))
+ ","
+ str(float(attributes["Py"]))
+ ","
+ str(float(attributes["Pz"]))
+ ")"
)
val += (
" ("
+ str(round(float(attributes["Q0"]), 4))
+ ","
+ str(round(float(attributes["Q1"]), 4))
+ ","
)
val += (
str(round(float(attributes["Q2"]), 4))
+ ","
+ str(round(float(attributes["Q3"]), 4))
+ ")"
)
self.contents[self.obj + "00000000::" + self.prop] = val
elif tag in ["PropertyColor"]:
if self.prop and self.obj and (self.short == 0):
c = int(attributes["value"])
r = float((c >> 24) & 0xFF) / 255.0
g = float((c >> 16) & 0xFF) / 255.0
b = float((c >> 8) & 0xFF) / 255.0
val = str((r, g, b))
self.contents[self.obj + "00000000::" + self.prop] = val
elif tag == "Objects":
self.count = attributes["Count"]
self.obj = None
# Print all the contents of the document properties
items = self.contents.items()
items = sorted(items)
for key, value in items:
key = self.clean(key)
value = self.clean(value)
print(" " + key + " : " + value)
print(" Objects: (" + self.count + ")")
self.contents = {}
def endElement(self, tag):
if (tag == "Document") and (self.short != 2):
items = self.contents.items()
items = sorted(items)
for key, value in items:
key = self.clean(key)
if "00000000::" in key:
key = " " + key.split("00000000::")[1]
value = self.clean(value)
if value:
print(" " + key + " : " + value)
def clean(self, value):
value = value.strip()
return value
if __name__ == "__main__":
if len(sys.argv) < 2:
print(__doc__)
sys.exit()
if ("-h" in sys.argv[1:]) or ("--help" in sys.argv[1:]):
print(__doc__)
sys.exit()
ext = sys.argv[-1].rsplit(".")[-1].lower()
if not ext.startswith("fcstd") and not ext.startswith("fcbak"):
print(__doc__)
sys.exit()
if ("-vs" in sys.argv[1:]) or ("--veryshort" in sys.argv[1:]):
short = 2
elif ("-s" in sys.argv[1:]) or ("--short" in sys.argv[1:]):
short = 1
else:
short = 0
if ("-g" in sys.argv[1:]) or ("--gui" in sys.argv[1:]):
gui = True
else:
gui = False
zfile = zipfile.ZipFile(sys.argv[-1])
if not "Document.xml" in zfile.namelist():
sys.exit(1)
doc = zfile.read("Document.xml")
if gui and "GuiDocument.xml" in zfile.namelist():
guidoc = zfile.read("GuiDocument.xml")
guidoc = re.sub(b"<\?xml.*?-->", b" ", guidoc, flags=re.MULTILINE | re.DOTALL)
# a valid xml doc can have only one root element. So we need to insert
# all the contents of the GUiDocument <document> tag into the main one
doc = re.sub(b"<\/Document>", b"", doc, flags=re.MULTILINE | re.DOTALL)
guidoc = re.sub(b"<Document.*?>", b" ", guidoc, flags=re.MULTILINE | re.DOTALL)
doc += guidoc
s = os.path.getsize(sys.argv[-1])
if s < 1024:
s = str(s) + "B"
elif s > 1048576:
s = str(s / 1048576) + "M"
else:
s = str(s / 1024) + "K"
print("Document: " + sys.argv[-1] + " (" + s + ")")
print(" SHA1: " + str(hashlib.sha1(open(sys.argv[-1], "rb").read()).hexdigest()))
xml.sax.parseString(doc, FreeCADFileHandler(zfile, short))

3
.local/bin/foxfetch Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
uwufetch | sed 's/joe/vixi/g'

100
.local/bin/qalctex Executable file
View File

@@ -0,0 +1,100 @@
#!/bin/python
import subprocess
import re
# Dictionary for symbol conversion to LaTeX format
latex_symbols = {
"Ω": r"\Omega",
"ohm": r"\Omega",
"A": r"\text{A}",
"V": r"\text{V}",
"milliamperes": r"\text{mA}",
"*": r"\cdot",
"N*m": r"\text{N} \cdot \text{m}",
"in*lb": r"\text{in} \cdot \text{lb}",
"||": r"\|",
"": r"-",
"μ": r"\mu",
"": r"-",
}
def run_qalc(expression):
# Run qalc with the provided expression
result = subprocess.run(["qalc", expression], stdout=subprocess.PIPE, text=True)
output = result.stdout
return output
def format_expression_for_latex(expression):
# Replace the units and special characters in the input expression using the dictionary
for symbol, latex_symbol in latex_symbols.items():
expression = expression.replace(symbol, latex_symbol)
return expression
def format_result_for_latex(output):
# Get the last line of qalc output (the answer)
output = output.strip().split("\n")[-1]
# Check if the result is approximate (contains "≈")
approx_match = "≈" in output
# Extract the value and unit from the result
match = re.search(r"(≈|=)\s*([-\d\.]+)\s*(.*)", output)
if match:
_, value, unit = match.groups()
# Replace the units and special characters using the dictionary
unit = unit.strip()
for symbol, latex_symbol in latex_symbols.items():
unit = unit.replace(symbol, latex_symbol)
# Use = or \approx in LaTeX based on whether the result is approximate
equal_symbol = r"\approx" if approx_match else "="
# Only add \, if there's a unit
if unit:
latex_result = f"{equal_symbol} {value.strip()} \\, {unit}"
else:
latex_result = f"{equal_symbol} {value.strip()}"
return latex_result
return output # Fallback to returning the raw qalc output if no match
def copy_to_clipboard(text):
# Use wl-copy to send the text to the clipboard
subprocess.run(["wl-copy"], input=text, text=True)
def main():
try:
while True:
# Input the qalc expression
expression = input("\nEnter qalc expression (Ctrl+C to exit): ")
# Run qalc and get the result
qalc_output = run_qalc(expression)
# Format the input expression for LaTeX
latex_expression = format_expression_for_latex(expression)
# Format the output result for LaTeX
latex_result = format_result_for_latex(qalc_output)
# Combine both input expression and result for final LaTeX output
final_latex_output = f"{latex_expression} {latex_result}"
# Print and copy to clipboard
print(f"Final LaTeX output:\n{final_latex_output}")
copy_to_clipboard(final_latex_output)
print("LaTeX result copied to clipboard!")
except KeyboardInterrupt:
print("\nExiting...")
if __name__ == "__main__":
main()

5
.local/bin/switch_keys.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/bash
# From here https://github.com/drduh/YubiKey-Guide#readme
gpg-connect-agent "scd serialno" "learn --force" /bye

View File

@@ -1,2 +1,5 @@
# This line allows the word 'custom' to specify the dotfiles bare git repo # This line allows the word 'custom' to specify the dotfiles bare git repo
alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME' alias config='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
# Alias 'fucking' to 'sudo' cuz of this meme https://www.memesmonkey.com/topic/linux#&gid=1&pid=10
alias fucking=sudo

1685
.p10k.zsh Normal file

File diff suppressed because it is too large Load Diff

215
.ssh/config Normal file
View File

@@ -0,0 +1,215 @@
# SSH For my own hosts
# Oxygen
Host oxygen
HostName 10.85.3.30
User joe
Host crawler.kitsunehosting.net
HostName crawler.kitsunehosting.net
User joe
host edge
HostName 10.85.5.52
User joe
host lakemesh
HostName 172.25.72.74
User joe
host portainer
HostName 10.85.3.60
User joe
host bitwarden
HostName 10.85.3.83
User joe
host frigate
IdentityFile ~/.ssh/hydroxonium
HostName 10.85.5.20
User joe
host portainer
IdentityFile ~/.ssh/hydroxonium
HostName 10.85.3.60
User joe
host lithium
IdentityFile ~/.ssh/gallium
HostName 10.85.3.112
IPQoS cs0 cs0
User joe
host matrix
IdentityFile ~/.ssh/gallium
HostName 10.85.3.38
user joe
host crackheadbot
HostName 10.85.3.182
User joe
host dockerhost
HostName 10.85.3.75
User joe
Host cobalt
HostName 10.85.3.6
User root
Host ssh.kitsunehosting.net
port 2222
IdentityFile ~/.ssh/gitea
# Supermicro machine in the server rack
Host manganese
HostName 10.85.3.5
User root
# R710
Host nickel
HostName 10.85.3.4
User root
# My main NAS
Host zinc
IdentityFile ~/.ssh/hydroxonium
HostName 10.85.3.120
User joe
# APRS
Host houston
IdentityFile ~/.ssh/hydroxonium
HostName 10.85.3.39
User joe
Host deck
HostName 10.85.3.221
User deck
# booru Image Server
Host booru
IdentityFile ~/.ssh/hydroxonium
HostName 10.85.3.71
User joe
# Caddy
Host caddy
IdentityFile ~/.ssh/hydroxonium
HostName 10.85.3.9
User joe
# Robotics
# 1721's main NAS
Host flattoaster
HostName 10.17.21.10
PreferredAuthentications password
IdentityFile none
User root
Host robotics-vps
HostName 50.116.52.250
User root
Host lapis
HostName 10.17.21.30
User joe
# SSH for git servers
# Gitlab
Host gitlab.com
IdentityFile ~/.ssh/gitlab
UpdateHostKeys no
# Arch User Repo
Host aur.archlinux.org
IdentityFile ~/.ssh/aur
User aur
# Personal Git Server
Host ssh.kitsunehosting.net
Port 2222
IdentityFile ~/.ssh/gitea
# Github
Host github.com
Hostname ssh.github.com
Port 443
User git
IdentityFile ~/.ssh/github
Host snowsunehost
Hostname 10.85.3.65
User joe
# Also github but, for snowsune
Host github_snowsune
HostName ssh.github.com
User git
Port 443
IdentityFile ~/.ssh/github_snowsune
IdentitiesOnly yes
# Bitbucket
Host bitbucket.org
IdentityFile ~/.ssh/bitbucket
# Silvertech
Host devserver
HostName 10.12.32.35
User joe
Host bosch
HostName 192.168.0.41
#IdentityFile ~/.ssh/silvertech/ssh_host_dsa_key
#UpdateHostKeys no
Host retropie
HostName 10.19.80.2
User pi
IdentityFile ~/.ssh/silvertech/silvertech
IdentitiesOnly yes
# The little docker host in the closet
# Runs the vestabot image
Host stdocker1
HostName 10.10.20.27
IdentityFile ~/.ssh/silvertech-iot
# Platformio remote
Host pio-remote
HostName 10.144.0.15
IdentityFile ~/.ssh/silvertech-iot
# Little mini-pc in the IOT room
Host pioremote
# This is actually a zerotier ip
HostName 10.144.0.15
IdentityFile ~/.ssh/silvertech/silvertech
IdentitiesOnly yes
# Work laptop
Host workLaptop
HostName 10.144.236.234
IdentityFile ~/.ssh/hydroxonium
# Argen pi
Host argen
HostName 10.10.20.11
User joe
IdentityFile ~/.ssh/gitlab
# Millyard labs
Host git.millyardlabs.com
IdentityFile ~/.ssh/millyard
Host asterisk
HostName 10.85.3.155
IdentityFile ~/.ssh/hydroxonium
# Pterodactyal stuff
Host wing1.kitsunehosting.net
HostName wing1.kitsunehosting.net
PreferredAuthentications password
IdentityFile none

4
.vimrc Normal file
View File

@@ -0,0 +1,4 @@
set spell spelllang=en_us
syntax on
set number

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

BIN
.wallpaper/Riven.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

49
.zshrc
View File

@@ -1,9 +1,24 @@
# Joe added this: # Joe added this:
uwufetch uwufetch
echo ""
fortune -a
# This is for platformio on work machine
path+=("$HOME/.platformio/penv/bin")
# Add my bins to path
path+=("$HOME/.local/bin")
path+=("$HOME/Pictures/Furry/Scripts")
path+=("/opt/balena-cli/")
export PATH
# LaTeX Import path
export TEXINPUTS=/home/joe/College/SNHU/LaTeX:$(kpsepath tex | tr ':' '\n' | head -n 1):
# Not sure why but, needed to path these manually for ruby bin
path+=("/home/joe/.local/share/gem/ruby/3.3.0/bin")
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi fi
@@ -12,7 +27,7 @@ fi
# export PATH=$HOME/bin:/usr/local/bin:$PATH # export PATH=$HOME/bin:/usr/local/bin:$PATH
# Path to your oh-my-zsh installation. # Path to your oh-my-zsh installation.
export ZSH="/home/joe/.oh-my-zsh" export ZSH="$HOME/.oh-my-zsh"
# Set name of the theme to load --- if set to "random", it will # Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case, # load a random theme each time oh-my-zsh is loaded, in which case,
@@ -88,6 +103,7 @@ plugins=(
zsh-autosuggestions zsh-autosuggestions
zsh-syntax-highlighting zsh-syntax-highlighting
zsh-z zsh-z
virtualenv
) )
source $ZSH/oh-my-zsh.sh source $ZSH/oh-my-zsh.sh
@@ -118,6 +134,13 @@ fi
# alias zshconfig="mate ~/.zshrc" # alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh" # alias ohmyzsh="mate ~/.oh-my-zsh"
# https://www.reddit.com/r/archlinux/comments/p0y2hs/flatpak/
alias update="paru -Syu --skipreview; flatpak update; sudo snap refresh"
# Power
alias upshift="powerprofilesctl set performance"
alias downshift="powerprofilesctl set power-saver"
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
export FZF_DEFAULT_COMMAND='fdfind --type f' export FZF_DEFAULT_COMMAND='fdfind --type f'
@@ -125,3 +148,23 @@ export FZF_DEFAULT_OPTS="--layout=reverse --inline-info --height=80%"
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
# This is fo cumtanks lol
cumtanks() {
cd /home/joe/git/Snowsune/cumtanks || return 1
EPOCH=$(date +%s)
DATA_JSON="www/data.json"
tmpfile=$(mktemp)
awk -v epoch="$EPOCH" '
BEGIN { added=0 }
/"logs"[ \t]*:[ \t]*\[/ { inlogs=1 }
inlogs && /\]/ && !added {
sub(/\]/, " ,{ \"date\": " epoch ", \"text\": \"\" }\n ]")
added=1
}
{ print }
' "$DATA_JSON" > "$tmpfile" && mv "$tmpfile" "$DATA_JSON"
sed -i 's/,\n ]/\n ]/' "$DATA_JSON"
code -g "$DATA_JSON":$(grep -n '"logs"' "$DATA_JSON" | cut -d: -f1)
}

54
README.md Normal file
View File

@@ -0,0 +1,54 @@
# Clone repo
```git clone --bare https://kitsunehosting.net/gitea/Kenwood/dotfiles.git $HOME/.dotfiles```
# Make a temp alias (will be perminant via .zshrc)
```alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'```
# Pull stuff down!
```config checkout```
# If things offend, backup or delete existing/differeing files.
# This could work but idk
```
mkdir -p .config-backup && \
config checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | \
xargs -I{} mv {} .config-backup/{}
```
# Also use this to keep it all neat!
```
config config --local status.showUntrackedFiles no
```
# Also, clone all the zsh plugins
# Install omzsh!
```
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
```
# p10k
```
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
```
# Autocompletions
```
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
```
# Syntax highlighting
```
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
```
# zsh-z
```
git clone https://github.com/agkozak/zsh-z $ZSH_CUSTOM/plugins/zsh-z
```
# fzf
```
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
```

View File

@@ -0,0 +1,150 @@
[kwin][Global Shortcuts]
Activate Window Demanding Attention=Ctrl+Alt+A
ClearLastMouseMark=Meta+Shift+F12
ClearMouseMarks=Meta+Shift+F11
Decrease Opacity=
Expose=Ctrl+F9
ExposeAll=Ctrl+F10; Launch (C)
ExposeClass=Ctrl+F7
Increase Opacity=
Invert Screen Colors=
Kill Window=Ctrl+Alt+Esc
MoveMouseToCenter=Meta+F6
MoveMouseToFocus=Meta+F5
MoveZoomDown=
MoveZoomLeft=
MoveZoomRight=
MoveZoomUp=
Setup Window Shortcut=
Show Desktop=Meta+D
ShowDesktopGrid=Ctrl+F8
Suspend Compositing=Alt+Shift+F12
Switch One Desktop Down=Meta+Ctrl+Down
Switch One Desktop Up=Meta+Ctrl+Up
Switch One Desktop to the Left=Meta+Ctrl+Left
Switch One Desktop to the Right=Meta+Ctrl+Right
Switch Window Down=
Switch Window Left=
Switch Window Right=
Switch Window Up=
Switch to Desktop 1=Ctrl+F1
Switch to Desktop 10=
Switch to Desktop 11=
Switch to Desktop 12=
Switch to Desktop 13=
Switch to Desktop 14=
Switch to Desktop 15=
Switch to Desktop 16=
Switch to Desktop 17=
Switch to Desktop 18=
Switch to Desktop 19=
Switch to Desktop 2=Ctrl+F2
Switch to Desktop 20=
Switch to Desktop 3=Ctrl+F3
Switch to Desktop 4=Ctrl+F4
Switch to Desktop 5=
Switch to Desktop 6=
Switch to Desktop 7=
Switch to Desktop 8=
Switch to Desktop 9=
Switch to Next Desktop=
Switch to Next Screen=
Switch to Previous Desktop=
Switch to Previous Screen=
Switch to Screen 0=
Switch to Screen 1=
Switch to Screen 2=
Switch to Screen 3=
Switch to Screen 4=
Switch to Screen 5=
Switch to Screen 6=
Switch to Screen 7=
Toggle Night Color=
Toggle Window Raise/Lower=
ToggleCurrentThumbnail=Meta+Ctrl+T
Walk Through Desktop List=
Walk Through Desktop List (Reverse)=
Walk Through Desktops=
Walk Through Desktops (Reverse)=
Walk Through Windows=Alt+Tab
Walk Through Windows (Reverse)=Alt+Shift+Backtab
Walk Through Windows Alternative=
Walk Through Windows Alternative (Reverse)=
Walk Through Windows of Current Application=Alt+`
Walk Through Windows of Current Application (Reverse)=Alt+~
Walk Through Windows of Current Application Alternative=
Walk Through Windows of Current Application Alternative (Reverse)=
Window Above Other Windows=
Window Below Other Windows=
Window Close=Alt+F4
Window Fullscreen=
Window Grow Horizontal=
Window Grow Vertical=
Window Lower=
Window Maximize=Meta+W
Window Maximize Horizontal=
Window Maximize Vertical=
Window Minimize=Meta+Alt+Down
Window Move=
Window No Border=
Window On All Desktops=
Window One Desktop Down=
Window One Desktop Up=
Window One Desktop to the Left=
Window One Desktop to the Right=
Window Operations Menu=Alt+F3
Window Pack Down=
Window Pack Left=
Window Pack Right=
Window Pack Up=
Window Quick Tile Bottom=Meta+Down
Window Quick Tile Bottom Left=Meta+Shift+Left
Window Quick Tile Bottom Right=Meta+Shift+Down
Window Quick Tile Left=Meta+Left
Window Quick Tile Right=Meta+Right
Window Quick Tile Top=Meta+Up
Window Quick Tile Top Left=Meta+Shift+Up
Window Quick Tile Top Right=Meta+Shift+Right
Window Raise=
Window Resize=
Window Shade=
Window Shrink Horizontal=
Window Shrink Vertical=
Window to Desktop 1=
Window to Desktop 10=
Window to Desktop 11=
Window to Desktop 12=
Window to Desktop 13=
Window to Desktop 14=
Window to Desktop 15=
Window to Desktop 16=
Window to Desktop 17=
Window to Desktop 18=
Window to Desktop 19=
Window to Desktop 2=
Window to Desktop 20=
Window to Desktop 3=
Window to Desktop 4=
Window to Desktop 5=
Window to Desktop 6=
Window to Desktop 7=
Window to Desktop 8=
Window to Desktop 9=
Window to Next Desktop=
Window to Next Screen=
Window to Previous Desktop=
Window to Previous Screen=
Window to Screen 0=
Window to Screen 1=
Window to Screen 2=
Window to Screen 3=
Window to Screen 4=
Window to Screen 5=
Window to Screen 6=
Window to Screen 7=
view_actual_size=Meta+0
view_zoom_in=Meta+=
view_zoom_out=Meta+-
[yakuake][Global Shortcuts]
toggle-window-state=F12