This is an easy-to-replicate setup of my current Linux Mint workstation. Feel free to fork it, make it yours, and share your improvements.
The current Cinnamon desktop: a simple top panel, app dock, and live system monitors.
It is a collection of small, readable setup scripts that recreate the useful parts of my workstation on another Linux Mint machine.
Instead of remembering every package, setting, shortcut, and desktop tweak, I keep the repeatable parts here. You can preview everything first, apply only the profiles you want, and change the public defaults without copying any of my private data.
| Area | What it recreates |
|---|---|
| Apps | A curated set of APT packages and Flatpaks |
| Desktop | Cinnamon panel, themes when available, four workspaces, and app shortcuts |
| Monitoring | CPU, CPU temperature and fan state, RAM, network up/down speed, storage, and battery |
| Terminal | GNOME Terminal colours and JetBrains Mono |
| Shell | A small Bash PATH fragment without replacing the default .bashrc |
| Startup | Portable Slack and CopyQ login entries |
| Development | GitHub CLI, Node/npm, compilers, and optional pinned developer tools |
This is not a full disk image or a backup of my home folder. It deliberately leaves out documents, passwords, browser sessions, SSH keys, Wi-Fi credentials, and other personal state.
Clone the repository:
git clone https://github.com/karthikmudaliarX/mintbook-workstation.git
cd mintbook-workstationPreview the desktop setup without changing anything:
./install.sh --profile desktopPreview the desktop and development setup together:
./install.sh --profile desktop --profile developmentWhen the preview looks right, apply it explicitly:
./install.sh --apply --profile desktop --profile developmentImportant
The installer is a dry run by default. It changes the machine only when you add --apply.
The project currently targets Linux Mint 22.3 with Cinnamon on X11. Apply mode is intentionally conservative on other environments.
Profiles can be combined, so you do not need to adopt the whole setup.
| Profile | Includes |
|---|---|
desktop |
Codecs, desktop utilities, Flatpaks, terminal styling, autostart entries, Cinnamon layout, and monitor widgets |
development |
Compilers, GitHub CLI, Node/npm, shell tooling, and optional pinned Codex, OpenCode, and Rust configuration |
remote |
OpenSSH and network diagnostics; Tailscale and NoMachine remain manual vendor installs |
optional |
Opt-in conveniences such as earlyoom and zram tools |
hardware-intel-laptop |
Intel microcode, thermal, sensor, firmware, and VA-API packages; use only on matching hardware |
APT and Flatpak installation is idempotent: packages that are already installed are left in place.
The desktop profile also:
- fetches exact reviewed component revisions without running their installers
- installs the pinned system-monitor desklet and disabled BlurCinnamon files
- lays out six monitor cards relative to the detected primary display
- detects the default network interface, battery name, root filesystem, and CPU fan sensor
- restores the top panel, available themes, four workspaces, and the Super + V CopyQ shortcut
- backs up existing shell, terminal, component, and Cinnamon state before changing it
- automatically restores desktop state if an apply step fails
Fork the repository and edit the one-package-per-line manifests in packages/, change a profile in profiles/, or add your own small installer.
For local values that should not be committed, copy the example configuration and pass it explicitly:
cp local.example.conf local.conf
./install.sh --config ./local.conf --profile development
./install.sh --apply --config ./local.conf --profile developmentThe installer never searches for or imports local.conf, dotfiles, or existing home-directory configuration automatically.
install.sh checks the operating system, combines the selected profiles, and hands each job to a focused installer.
install.sh
├─ packages/ + profiles/ APT and Flatpak intent
├─ components/ pinned, non-executing source acquisition
├─ desktop/cinnamon/ settings and detected monitor layout
├─ desktop/terminal/ presentation-only terminal settings
├─ dotfiles/bash/ one portable sourced PATH fragment
├─ autostart/ Slack and CopyQ login entries
└─ services/ separately enabled user-service templates
External tools are handled carefully:
- Codex and OpenCode are installed only when explicit versions are supplied through
--config. - An existing rustup installation can be moved to an explicit toolchain.
- Bun, Cursor, Google Chrome, Tailscale, and NoMachine are not installed through mutable curl-pipe-shell commands. Follow their official instructions and pin versions where possible.
The always-awake and weekly Codex Desktop update services are not enabled by any profile. Review and preview them separately:
./services/install.sh
./services/install.sh --apply never-sleepBlocking sleep is not a sensible default for many laptops, so it remains an explicit choice.
- Mintbook's custom Clear/Dark and Local/Remote theme variants are not redistributed yet.
codexbar@localremains optional until its command paths and release source are public. The panel works without it.- Wayland, monitor/EDID restoration, Wi-Fi/VPN, printers, browsers, SSH, and authentication state are out of scope.
- Bun, Cursor, Google Chrome, Tailscale, and NoMachine remain documented manual installs.
- This is not presented as a complete disaster-recovery image until apply mode has also been tested on a clean Cinnamon X11 account.
Please do not commit:
- SSH or GPG private keys, tokens, cookies, credentials, or
.envfiles - browser, editor, Codex, OpenCode, or cloud session state
- shell history, Wi-Fi/VPN secrets, or NetworkManager connections
- complete dconf dumps,
monitors.xml, device IDs, or private endpoints - personal documents or assets you do not have permission to redistribute
The bootstrap never copies content from the current home directory. Public templates contain placeholders only.
Before publishing a change, run:
./scripts/verify.shThe verifier checks Bash syntax, JSON, tests, ShellCheck when available, and a deterministic secret/path scanner. It also runs Gitleaks when installed.
Fork it, customise it, and open a pull request if you make something broadly useful. See CONTRIBUTING.md for the small set of project rules.
The bootstrap code is available under the MIT License. Third-party packages and applications keep their own licenses.
