A new way to do Conky

Sorry for the long read in advance.

A sneak peek at the 1.1.0 Conky Studio that is coming out soon, where 1 or even 2 nodes = a widget

What you see is what you get. No mockups, real conky

Conky Studio (full feature list for 1.1.0, some differ from the current 1.0.7.5)

**Visual node-graph editor for building Conky HUDs and system monitors.**

Conky Studio turns Conky theme creation into a drag-and-drop workflow. You design on a canvas of connected nodes (data sources -> logic -> visuals), then **Build** to generate real Conky files (`.conf`, `render.lua`, `start.sh`, helper scripts). Installed themes run independently of the app; Studio is an authoring tool, not a required runtime.

| What it is | What it produces |

|------------|------------------|

| Visual node editor (Sources, Logic, Visuals) | `conky.conf` + `render.lua` + `start.sh` + scripts |

| Theme Wizard for styled starter HUDs | Editable project graph (learning scaffold) |

| Manager for installed themes | Launch/stop/install from archives |

| Community stores | **Theme Vault** (themes) + **Node Vault** (plugins) + OpenDesktop/Pling |

**Target platform:** Linux (Conky + Cairo + Lua).

**Install root for themes:** `~/.config/conky/` (and legacy `~/.conky/`).

| Tab | Purpose |

|-----|---------|

| **Manager** | Discover installed themes, install archives, launch/stop with live logs |

| **Studio** | Design HUDs on the node canvas; Theme Wizard, preview, build |

| **Store** | **Theme Vault** (community themes) + OpenDesktop / Pling search & install |

Switch tabs freely. Tours walk through all three in sequence.

Studio is the core authoring environment.

- **Palette (left)** — All node types, grouped by category and subcategory. Simple / Complex filter.

- **Canvas (center)** — Drag nodes, connect sockets (wires), group and collapse nodes, pan/zoom the graph.

- **Layers/Windows** — Multi-window Conky output; layer order and window assignment.

- **Properties** — Dockable panel for editing the selected node’s properties (numbers, colours, gradients, fonts, paths, enums, code, bindable inputs). Same values as the Position Stage and Live Preview use.

- **Preview** — Live or snapshot preview of the generated theme.

- **Position Stage** — Screen-space layout dock; drag visual proxies on a window-sized plane (see below).

Docks (Properties, Preview, Position Stage, Layers, Windows) can be rearranged, tabbed, or floated like standard IDE panels.

  1. Drag **Source** nodes (CPU, GPU, weather, media, etc).

  2. Optionally wire through **Logic** (math, thresholds, smoothing, etc).

  3. Connect to **Visual** nodes (gauges, graphs, text, effects, shapes).

  4. Select a node and edit it in the **Properties** dock (colours, fonts, sizes, positions, poll mode, etc), **or** drag visuals on the Position Stage for placement.

  5. **Save Project** (`.json`) to keep editing later.

  6. **Build & Install** to export files into Manager and run them.

- Multi-window projects (Canvas Settings).

- Bindable properties — wire a source/logic output into a visual’s value, colour trigger, etc.

- Image/path properties copy assets into the theme’s `images/` or `assets/` on build.

- Custom Lua node for advanced/imported themes.

- Import Custom Files — bring existing `.lua` / `.sh` / `.conf` into the graph as nodes.

Position stage is a dockable **screen-space layout editor**, separate from the node-graph canvas (which is for data flow and wiring).

Visual nodes appear as draggable proxies on a plane the size of the selected Conky window (resolution/workable area). Moving a proxy writes the same `x`/`y` or `cx`/`cy` properties that the property panel edits, so Live Preview and Build pick up the change through the normal graph-changed path.

| It is | It is not |

|-------|-----------|

| Alternate layout editor for on-screen placement | A replacement for the property-panel X/Y spinboxes |

| Window-sized stage matching Live Preview/Windows dock | The node-graph canvas (wiring stays on the graph) |

| Synced with selection and property edits | A second source of truth; one set of props |

| Control | Action |

|---------|--------|

| **Window** combo | Which window’s resolution the stage represents (matches multi-window projects) |

| **Snap** + **Step** | Optional pixel grid snap while dragging (e.g., 10 px) |

| **Fit** | Zoom to fit the window rectangle |

| **↻ Refresh** | Reload proxies from the current project |

| **Ctrl + scroll** | Zoom |

| **Alt + drag** or **middle-click** | Pan |

| **Drag proxy** | Move visual; writes `x`/`y` or `cx`/`cy` |

- Only **visual** nodes with position properties (`x`/`y` or centre `cx`/`cy`) get proxies.

- Proxy size is estimated from common props (`width`/`height`, `size`, `radius`, bar counts, etc.) so small nodes stay grab-able.

- Centre-based nodes (`cx`/`cy`) map the proxy centre to the stored value; corner-based nodes (`x`/`y`) map the top-left.

- Window frame shows a grid, centre crosshair, and corner coordinates `(0,0)` … `(W,H)`.

- When a window has `visible_node_ids`, only those visuals appear on that window’s stage; otherwise, all visible visuals are shown.

- Selection on the stage can sync with the property panel; external graph changes (prop panel, etc.) refresh the stage.

Tabify it with Preview/Layers/Windows docks in Studio for a convenient layout workflow.

Nodes are pure metadata (`NodeSpec`) registered by category. Socket colours follow data kinds: percent, celsius, number, text, category.

Data that feeds the rest of the graph.

| Subcategory | Examples |

|-------------|----------|

| **System** | CPU Usage, RAM Usage, Disk Usage, Battery, CPU Frequency, RAM Used/Total, Swap |

| **System Info** | Uptime, Hostname, Kernel, Process Count, Top Process (name/CPU/RAM), Load Average, Threads, Running Processes |

| **Network** | Download, Upload, Total Down/Up, Wi-Fi SSID, Wi-Fi Signal, Public IP |

| **Time** | Greeting, Date/Time |

| **Sensors** | CPU Temp, GPU Util, GPU Temp, GPU VRAM Used/Total, Disk Temp, Fan RPM |

| **Weather** | Condition, Category, Temp (°F) |

| **Media** | Track Title, Artist, Album, Playback Status, Progress % |

| **Custom** | Custom Script (arbitrary command/cache) |

Sensors and many external sources support **Polling mode**:

- **Simple (Conky `execi`)** — Conky runs the command on an interval.

- **Background daemon** — `start.sh` runs a dedicated loop; zero-stutter reads from cache (recommended for GPU/temp/fan).

Nodes that share a `script_family` (e.g., `gpu_stats`) are deduplicated: one script, one cache, multiple readers.

Transform and gate values between sources and visuals.

| Node | Role |

|------|------|

| Math | add/sub/mul/div/etc |

| Conditional | if comparison then/else |

| String Format | template + decimals |

| Map Range | remap input range -> output range |

| Clamp | min/max bounds |

| Lerp | linear interpolate |

| Threshold Gate | binary gate on comparison |

| Deadzone | ignore small changes around a centre |

| Invert Percent | 100 − value |

| Scale/Offset | multiply + add |

| Round, Absolute | numeric helpers |

| AND/OR Gate, Pick A/B | boolean/selection |

| Smooth (EMA) | exponential moving average |

| Rate of Change | delta over time |

| Hysteresis | dual-threshold switching |

| String Join, Enum Map | text helpers |

What is drawn on screen.

| Subcategory | Examples |

|-------------|----------|

| **Text** | Text Label, Flip Card, Wall Calendar |

| **Gauges & Bars** | Arc/Ring Gauge, Bar, Needle Gauge, Segmented Gauge, Reactor Gauge, Ring Track, LED Dot, CPU Core Strip |

| **Graphs** | History Graph, Sparkline, Multi-Series Line Graph, Radar Chart, Top Processes Table |

| **Effects** | Glow/Pulse, Spiral, Orbit Field, Equalizer Bars, Spinning Fan, Radial Spectrum, Matrix Rain, Loading Dots, Analog Clock |

| **Shapes** | Rectangle, Circle, Triangle, Star, H/V Line, Crosshair |

| **Icons & Images** | Image/Icon (with conditional path swap), Weather Icon (cairo drawn, and weather change logic alreaady implemented) |

| **Media** | Vinyl Spinner |

| **Advanced** | Custom Lua (raw Lua passthrough) |

Visual properties typically include position, size, colour, opacity, fonts, and bindable value inputs.

- Window size, gap, own_window hints, update interval, etc.

- Multiple Conky windows from one project.

**Project → New HUD…** opens the Theme Wizard.

It is a **learning scaffold**, not a finished theme to ship unchanged. Generated graphs are meant to be edited in Studio, so you learn the node system.

| Step | Options |

|------|---------|

| **Category (style)** | Minimal, Gaming, RPG, Sci-Fi, Cyberpunk, Terminal, Fantasy, Arkhamos |

| **Resolution** | 1920×1080, 2560×1440, 3440×1440, 3840×2160 (more may be added in the future) |

| **Panels** | Clock, weather, music, battery, disk, network graph, system vitals, etc. |

| **Extras** | Flourish chrome, logic demos, etc. (tier-dependent) |

| **Complexity** | **Simple** · **Full** · **Showcase** |

- **Simple** — clean vitals, fewer decorations.

- **Full** — solid multi-panel HUD.

- **Showcase** — densest layout, extra effects, and logic edges for exploration.

On Create, a full project graph is loaded into Studio. Edit nodes, fix sensor modes, rename, and rebuild.

**Tour default:** Full Tour pre-selects **Minimal + Showcase** so you see a rich graph and common pitfalls (e.g., sensor `execi` defaults) firsthand.

The manager is a front-end for themes already installed under `~/.config/conky` (and `~/.conky`) if they have a `start.sh`, the manager can run them.

- **List** of installed themes with thumbnails and metadata.

- **Drop zone** — drag-and-drop `.zip` / `.tar.gz` / `.tar` archives, or click to browse.

- **Refresh** — rescan install directories.

- **Detail pane** — name, description, paths, actions.

- **Launch/Stop** — runs the theme’s `start.sh` (process group + PID lock); stop kills the group cleanly.

- **Live log** — stdout/stderr from the running theme process.

- Edit the README and theme.json

- Zip files to export

- Import themes via drag and drop, or search files

- Themes keep working after Conky Studio is closed; Manager is a convenience, not a dependency.

Community theme discovery lives here. (Community **node plugins** are in **Node Vault**, under Tools -> Plugins.)

The community **theme** catalogue.

- Driven by a remote `manifest.json` (+ per-theme JSON refs).

- **Browse only/link-out** — opens the theme’s real home (GitHub, Pling, KDE Store, openDesktop, etc) in your browser.

- Preview images and README fetched on demand.

- Nothing is downloaded or executed by Studio from this panel; you install from the host site or via the OCS panel below.

- Live search against the Open Collaboration Services API.

- **In-app install** — downloads and installs selected content into the Manager’s install root.

- Respects rate limits; handles provider base URLs.

| Action | What it does |

|--------|----------------|

| **New HUD…** | Theme Wizard -> starter graph |

| **New Blank HUD** | Empty project |

| **Open Project…** | Load a saved `.json` project |

| **Save Project…** | Write the editable graph + metadata (keeps working in Studio) |

| **Build to Folder…** | Export Conky files to a directory you choose |

| **Build & Install to Manager** | Export + copy into `~/.config/conky/<theme-name>/` so Manager can launch it |

| **Import Custom Files…** | Bring existing Lua/shell/conf into the graph (Custom Lua / Custom Script nodes, assets) |

**Save** = keep the project for further editing.

**Build** = generate the files Conky actually runs.

You almost always Save often and Build when you want to run or share the theme.

A successful build produces a self-contained theme directory, for example:

```

my-theme/

├── conky.conf # Conky config (windows, lua load, gaps, etc)

├── render.lua # Cairo drawing + framework + per-node code

├── `start.sh` # Launch script (setsid, PID lock, optional daemons)

├── scripts/ # Family scripts (gpu_stats.sh, etc) and custom scripts

├── images/ / assets/ # Copied PATH/image assets

└── theme_meta.json # Name, description, thumbnails metadata

```

Internals with a custom Lua API and Cairo engine.

- **Lua framework** — shared helpers, source refresh, draw dispatch.

- **Per-node generators** — each `NodeSpec.type` maps to a Lua emitter.

- **Script families** — shared sensor scripts + cache files; one process serves many nodes.

- **start.sh** — process management; starts background daemons when any node uses daemon poll mode.

- **Images** — PATH properties and Custom Lua asset lists are copied and path-rewritten.

Themes do not need Conky Studio installed to run.

| Item | Purpose |

|------|---------|

| **Hardware & Session…** | Report on display session, GPU tools, sensors, fonts, Conky presence, missing dependencies; useful for diagnosing missing data |

| **Install Font…** | Install a font family for use in Text/gauge labels (fontconfig-aware picker in properties) |

| **Plugins…** | **Node Vault** — fetch/install/uninstall community node plugins |

| Menu item | Description |

|-----------|-------------|

| **Getting Started…** | Built-in text guide (workflow, first HUD, troubleshooting) |

| **Take the Full Tour…** | Continuous tour: Theme Wizard (Minimal + Showcase) -> Studio (nodes, sensors, naming, save vs build) -> Manager -> Store |

| **Learn Studio…** | Studio-only interactive tour (palette, canvas, layers, properties, preview) |

| **Learn Theme Wizard…** | Wizard-only tour (category, resolution, panels, extras, complexity) |

| **Support…** | Discord + YouTube links |

| **Check for Updates…** | Compare local version to GitHub releases |

Tours use non-dimming highlight rings and floating cards; they can be re-run anytime.

**Full Tour flow (summary):**

  1. Opens Theme Wizard, pre-selects Minimal + Showcase, and explains it is a learning tool.

  2. After Create, Studio tour covers every node category/subcategory overview.

  3. Explains sensors need **daemon** (not execi) and that **spaces in theme names** break builds (use hyphens: `minimal-HUD`).

  4. Continues through Manager (launch/stop, install) and Store (Vault + OCS).

  5. Clarifies **Save project** vs **Build & Install**.

## Important Rules & Common Pitfalls

  1. **Theme names: no spaces**

    Use hyphens or underscores only.

    No: `Minimal HUD` -> build/runtime errors

    Yes: `Minimal-HUD` or `minimal_hud`

  2. **Sensors -> prefer daemon mode**

    GPU util/temp, CPU temp, fans: set **Polling mode = Background daemon**, then rebuild. Wizard defaults may leave execi so you can see the failure mode.

  3. **Save ≠ Build**

    Save keeps the editable project. Build generates the files Conky runs. Install puts those files where the Manager can launch them.

  4. **Wizard = scaffold**

    Treat wizard output as a starting graph. Edit nodes, fix poll modes, adjust layout, then build.

  5. **Plugins = same trust as scripts**

    Only load plugins from sources you trust.

  6. **Themes are standalone**

    After Build & Install, `start.sh` is enough; Studio does not need to stay open.

u/Overall_State_6305 — 13 days ago
▲ 14 r/Conkyporn+1 crossposts

Decided to challenge myself

This is what I call Core Pulse. A simple theme with gradients and a CRT background, not a wallpaper (the diagonal lines are a black wallpaper), an animated fan gauge, and an animated radar. I was going to add more, but decided to do a from 0 to theme hour challenge. Yes, this took an hour to make from scratch. I know I might get a lot of people saying, BS, but I am posting a video about how I did it, and no, none of this was copied from one project to the next.

u/Overall_State_6305 — 20 days ago

This is an Ironman theme I made

https://preview.redd.it/gtggs5pkg9fh1.png?width=1920&format=png&auto=webp&s=ed548ab98b7ddadafdea6ef4d8df9c7272c4b61d

The red line is just me redacting my location. The reactor load is the combination of the CPU, GPU VRAM, Disk, and RAM usage. The radar below circles around, as does the reactor gauge. Some aspects in the Batman theme were used in this one because I liked the look and colors to match the tech feel. I kept this one simpler to feel like it is a HUD in the suit. I wanted to originally add more, but the ideas I had were going to make it way too big for the look I was going for.

reddit.com
u/Overall_State_6305 — 28 days ago
▲ 6 r/Conkyporn+1 crossposts

Made a Batman theme

https://preview.redd.it/klmzhvy6l6fh1.png?width=1920&format=png&auto=webp&s=5b9886eb0d0e2fde0bec628ea8e135d24bbde327

The threat level with the bat signal will indicate if it is high when the CPU, RAM, and/or the GPU are reaching their limit. The red line was just me blocking out the location. As I like that to stay private. I have not made this public just yet. Bat signal pulses; the rings in the center spin, and the resource status bars fill. I like making these thematic conky themes. I might make more down the road.

reddit.com
u/Overall_State_6305 — 29 days ago

A simple Skyrim Conky theme with Lua and Cairo

The status bars drain as you use more resources; Followers (all) and Quests (current) are processes, Dovahzul to English pops up at different times, a Fus Ro Dah animation every 5 minutes, and all weather and dates are lore-friendly. I got the assets and font from a Nexus mod pack.

u/Overall_State_6305 — 1 month ago

I made a tool that makes troubleshooting easier

Grix is a tool I have been developing for a long while now for Debian/Ubuntu and derivatives. It does not do anything past safe fixes. It helps with telling you what is wrong with your system, uses pkexec to run a command (PolKit helper included), or you can copy the sudo command it provides. It runs best with other tools I built, but that is all in the README.

You can also choose to ignore things for a week, or forever if you wish. A tray icon is also included, so you can quickly see what is up. It will only push a notification if something is wrong after a scan. You can also force a scan in the GUI. It also has a Linux academy (what I call it) that teaches you Linux, has a sandbox kernel to safely test, and teaches the concept, not just the command, in easy-to-understand terminology. It is an AppImage for easy use.

The little Grix character changes from his normal blue to green when healthy, to yellow when something needs attention, and to red when it is really important.

Ignore the scans in the image; that was some testing I did before I released it.

Checks on every scan with a setting where you decide how frequent checks are (I just copied this from my README):

Category What it looks for
Package management Broken dependencies, interrupted installs, available updates, APT lock conflicts. This works with your package manager; it does not replace it. I would suggest using your package manager for updates, as some updates will be phased or locked by Ubuntu until Ubuntu releases them. So, you may get a warning that one or more did not update.
Disk space Root partition usage, APT cache, old kernels, unused Flatpak runtimes, old Snap revisions, oversized backup snapshots
Services Failed systemd units, audio stack health (PipeWire/PulseAudio)
Networking Internet connectivity, firewall (ufw) status
System logs Journal size, recent error clusters
Files Home directory files unexpectedly owned by root
Boot Most recent boot time

https://github.com/bobbycomet/Grix/tree/main

u/Overall_State_6305 — 1 month ago

Don't touch it? You got it.

A bit of backstory. This happened 4 years ago, so not every conversation is word-for-word. I worked at a gas station as a manager. They sort of trapped me in it. I was the guy you called when a store across state lines was short-staffed, or if they needed help with paperwork and or training employees. I was a staff lead on track to go to their IT department, until a company bought them out. I was, at the time, basically an assistant manager without handling money, that was until the promotion. The store was in the red, and they saw how I turned one store around when there was no manager, and the district manager (DM) handled the money.

So, they moved me to this new store as the new acting manager and just preached about the benefits. I took it, and from there is how this all happened. I am by no means some genius, but I have been developing things for Linux in my own time for myself. I had a side job where I repaired computers, and sometimes I built whole computers from parts people ordered. I'm smart, but I would not classify myself as a senior sysadmin, but definitely not a beginner, and I document everything (important later). The store I moved to had its kitchen removed and a damaged freezer, which tanked sales, but they believed it was other issues. I was on the track to join their IT, so I knew things beforehand about their systems, and all fixes were ones they would do; anything more, they would use the manufacturer. Now to the story.

So, I had gotten into the routine of things as a manager, paperwork, safe, bank, schedules, and started some weeks in the black, some in the red, before finally getting all in the black consistently (it took a couple of years to get everything fixed and convince them to bring the kitchen back). Well, the issue that made this happen was the equipment. Gas pumps, the server, the registers, the office computer, all of it was not extremely old, but showing its age. We had to defrag the office computer a couple of times. The card readers would go down, the server would just say, "Not today," registers would need us to call because an update broke something, pumps with BIOS errors, and so many more issues. At the head of all of that was what they called the commander. It basically controlled every single device in the store.

Well, when things would break, we had to make an IT ticket; they chose based on who had it worse. Two guys, 30 stores. It would be weeks before they would come out at times. I did not like that, so I fixed them myself. Granted, they have insurance and many other things to worry about, but their efficiency was ass. The server is down? I fixed it (this was not a tamper with it; mostly, it was a process somewhere that had an issue or was stuck). The office computer was down? I fixed it. Registers giving errors? I fixed it. Any problems that arose, I fixed them. Soda machine down? I fixed it. The most common one was the card readers. They were always on, so they had to be reset most of the time. You also could not just swap them, something I found out trying because I found the real error that day was that the register was not talking to it (normally, you could swap them if one was down). A lot of things had to be reset more than once a month.

I never took these things apart; these were all band-aid fixes against the real issues. Well, one day, they called me to train a new manager for a different store. My DM would handle my store while I did this. Why did my DM not train them? Because there were a few DMs, and it was not her area, so to preserve the proper chain of command, they saw this was the better option. As these new stores were bought out by us, they needed to learn the new structure. I did not care; it was a change of pace, seeing the same walls for 70+ hours a week gets tiring. This was where things started.

While there, I get a call, and another, and another. They asked me if I knew why something was down. Card readers, registers, and the pumps were not working. I knew the issue. You see, when those three are out at the same time, it is always the Verifone commander. If it freezes up, the whole system will not allow transactions with cards. I explained it, they did what I said (which was just to reset it), and it was working again. I was glad it was not the pumps because if they gave a BIOS error, you have to play a game of "Am I fast enough?" because you have to turn off the breaker for that pump, wait, turn it back on, reset the commander, and pray it worked.

Fast forward two weeks, and the head of IT and maintenance emailed me. They said that from now on, I had to put in the form to get things fixed. I, of course, emailed them back that if I do that and they do not come out soon enough, the store will lose money. They said, and I kid you not, "You do not understand how complex these systems are, any 'fix' you do could damage them." That last comment irked me a bit. I did not understand them? The guy who has been fixing things and pleading for updated systems for months does not understand them? Ok, fine. I told them I would comply. Again, I am not some genius, and I am not messing with the internals; I am doing what they would have if they came out. This would not have been an issue if there were a better system in place for soft resets, or if some kind of manual on issues that we could handle had been given out. But they wanted IT to handle it all.

After that, every time a card reader is down, send a form to IT. Every time a register is down, send the form to IT. Soda machine was down? Send a form to maintenance. They piled up very quickly, and to the point that they were fixing more than one issue when they came to my store. My DM asked why I stopped. I explained, she was pissed, but she could not tell me to fix it since the one in charge of the two departments was above her (the owner's son's friend).

After about 4 months of this, we had a manager's meeting where we all got a review (basically, corporate telling us what we are doing wrong and if you get a raise). They said my performance was bad, that I let the store get as bad as it was, and that I needed to change a few key points. I stopped them right there. I had come prepared because I always document everything. When I say everything, I am obsessed with documentation. I gave them the correlations of me fixing the equipment, making them fix the freezer, forcing them on bringing the kitchen back, and sales going up, I gave them the notes I had jotted down about when machines went down, I explained why my paperwork was late because I had to wait for the system to even work for 5 minutes to even email it off, I showed them the email of being told to send forms, and my sales dropping since then. I told them they can't give me a bad review for complying with what I was asked to do.

This was when my DM chimed in and explained that I was originally supposed to be on the fast track to working IT, but after the company was recently bought out (because they kept buying more gas stations, they went into the red), I was removed from that track since the new company had their own much larger IT staff (they have not been brought in yet as it was a recent buyout, and the full change would take a while).

Well, they had to hold meetings after that; they had to talk about my review, about why I was dropped from the IT track, and about the current situation with the buyout. Well, unfortunately, around this time, my body was failing me (working 70+ hours with a bad back, bad knees, and a few other issues does not agree with so much standing at work); I could not stand for long, and I even blacked out at work (found out the hard way that I had developed diabetes 2 and my steroid shot for back pain the night before caused that). I had to quit.

I did write down in a notebook (because typing it was risky if they could access it at all and possibly not have it) instructions on all of the equipment and how I fixed things. Error codes, what certain situations looked like, and what they most likely meant, and so on. It was a masterpiece of documentation explaining everything I was doing and how to tell what the different issues were and how to fix them. I put my two weeks in, I left, a few days later I got called about the notebook, I told them where it is, they used it, and all seemed good. I heard from the grapevine that after the new company got to my old store and saw how I had to do things, they found my notebook, and the new owner heard about the whole thing. He was upset because he said talent that is learned through the trenches is valuable (really chill dude, met him a few times). But they ended up replacing the equipment sometime after I left, and I heard it cost them thousands. Not damaging money, but enough for a pocket to feel lighter.

Now I work from home, I still develop Linux tools and have made some public, started writing, and have worked with content creators. I don't make as much as I did there, but it is peaceful, and I don't have to worry about an outdated system fighting me every day. Moral of the story: don't blame the guy trying to keep the ship floating.

Sorry for not formatting. People assume AI when you format, which is wild to me.

reddit.com
u/Overall_State_6305 — 2 months ago

IT told me I didn't understand the systems, so I stopped fixing them. The store learned what I actually did.

Backstory

I won't bore you with tech jargon. I'll just keep it simple.

I worked at a gas station as a manager. They sort of trapped me in it. I was the guy you called when a store across state lines was short-staffed, or if they needed help with paperwork and/or training employees. I was a staff lead on track to go to their IT department, until a company bought them out. I was, at the time, basically an assistant manager without handling money, that was until the promotion. The store was in the red, and they saw how I turned one store around when there was no manager, and the district manager (DM) handled the money. So, they moved me to this new store and just preached about the benefits. I took it, and from there is how this all happened. I am by no means some genius, but I have been developing things for Linux in my own time for myself. I had a side job where I repaired computers, and sometimes I built whole computers from parts people ordered. I'm smart, but I would not classify myself as a senior sysadmin, but definitely not a beginner, and I document everything (important later). Now to the story.

Becoming unofficial IT

So, I had gotten into the routine of things, paperwork, safe, bank, schedules, and started some weeks in the black, some in the red, before finally getting all in the black consistently (it took a couple of years). Well, the issue that made this malicious compliance happen was the equipment. Gas pumps, the server, the registers, the office computer, all of it was not extremely old, but showing its age. We had to defrag the office computer a couple of times. The card readers would go down, the server would just say, "Not today," registers would need us to call because an update broke something, pumps with BIOS errors, and so many more issues. At the head of all of that was what they called the commander. It basically controlled every single device in the store.

Well, when things would break, we had to make an IT ticket; they chose based on who had it worse. Two guys, 30 stores. It would be weeks before they would come out at times. I did not like that, so I fixed them myself. Granted, they have insurance and many other things to worry about, but their efficiency was ass. The server is down? I fixed it. The office computer was down? I fixed it. Registers giving errors? I fixed it. Any problems that arose, I fixed them. Soda machine down? I fixed it. The most common one was the card readers. They were always on, so they had to be reset most of the time. You also could not just swap them, something I found out trying because I found the real error that day was the register was not talking to it.

I never took these things apart; these were all band-aid fixes against the real issues. Well, one day, they called me to train a new manager for a different store. My DM would handle my store while I did this. Why did my DM not train them? Because there were a few DMs, and it was not her area, so to preserve the proper chain of command, they saw this was the better option. As these new stores were bought out by us, they needed to learn the new structure. I did not care; it was a change of pace, seeing the same walls for 70+ hours a week gets tiring.

While there, I get a call, and another, and another. They asked me if I knew why something was down. Card readers, registers, and the pumps were not working. I knew the issue. You see, when those three are out at the same time, it is always the commander. If it freezes up, the whole system will not allow transactions with cards. I explained it, they did what I said (which was just to reset it), and it was working again.

The compliance

Fast forward two weeks, and the head of IT and maintenance emailed me. They said that from now on, I had to put in the form to get things fixed. I, of course, emailed them back that if I do that and they do not come out soon enough, the store will lose money. They said, and I kid you not, "You do not understand how complex these systems are, any 'fix' you do could damage them." That last comment irked me a bit. I did not understand them? The guy who has been fixing things and pleading for updated systems for months does not understand them? Ok, fine. I told them I would comply.

After that, every time a card reader is down, send a form to IT. Every time a register is down, send the form to IT. Soda machine was down? Send a form to maintenance. They piled up very quickly, and to the point that they were fixing more than one issue when they came to my store. My DM asked why I stopped. I explained, she was pissed, but she could not tell me to fix it since the one in charge of the two departments was above her.

The review

After about 4 months of this, we had a manager's meeting where we all got a review (basically, corporate telling us what we are doing wrong and if you get a raise). They said my performance was bad, that I let the store get as bad as it was, and that I needed to change a few key points. I stopped them right there. I had come prepared because I always document everything. When I say everything, I am obsessed with documentation. I gave them the correlations of me fixing the equipment and sales going up, I gave them the notes I had jotted down about when machines went down, I explained why my paperwork was late because I had to wait for the system to even work for 5 minutes to even email it off, I showed them the email of being told to send forms, and my sales dropping since then. I told them they can't give me a bad review for complying with what I was asked to do.

This was when my DM chimed in and explained that I was originally supposed to be on the fast track to working IT, but after the company was recently bought out (because they kept buying more gas stations, they went into the red), I was removed from that track since the new company had their own much larger IT staff (they have not been brought in yet as it was a recent buyout, and the full change would take a while).

The aftermath

Well, they had to hold meetings after that; they had to talk about my review, about why I was dropped from the IT track, and about the current situation with the buyout. Well, unfortunately, around this time, my body was failing me (working 70+ hours with a bad back, bad knees, and a few other issues does not agree with working so much standing); I could not stand for long, and I even blacked out at work. I had to quit. I did write down in a notebook (because typing it was risky if they could access it and not have it) instructions on all of the equipment and how I fixed things. Error codes, what certain situations looked like, and what they most likely meant, and so on. IT was a masterpiece of documentation. I put my two weeks in, I left, a few days later I got called about the notebook, I told them where it is, they used it, and all seemed good. I heard from the grapevine that after the new company got to my old store and saw how I had to do things, they found my notebook, and the new owner heard about the whole thing. He was upset because he said talent that is learned through the trenches is valuable. But they ended up replacing the equipment sometime after I left, and I heard it cost them thousands. Not damaging money, but enough for a pocket to feel lighter.

Now I work from home, I still develop Linux tools and have made some public, started writing, and have worked with content creators. I don't make as much as I did there, but it is peaceful, and I don't have to worry about an outdated system fighting me every day. Moral of the story: don't blame the guy trying to keep the ship floating.

TL;DR

IT told me to stop fixing broken equipment because I "don't understand the systems." I complied. Store performance tanked. They tried to blame me in my review. I had receipts. Left them my documentation bible on the way out.

reddit.com
u/Overall_State_6305 — 2 months ago