linuxify
v1.0.0
Published
Lightweight Linux system optimizer - manage services, extensions, and disk space with an intuitive web UI
Downloads
10
Maintainers
Readme
Linuxify
Lightweight Linux system optimizer - manage services, extensions, and disk space with an intuitive web UI
🚀 Features
- Service Management - Enable/disable non-critical system services
- Extension Control - Manage GNOME shell extensions (UI + system)
- Disk Cleanup - One-click cleanup tasks (APT cache, thumbnails, logs, etc.)
- Real-time Monitoring - Live system stats (uptime, load, memory, CPU, disk)
- Critical Protection - Cannot disable critical system services
- Tabbed Interface - Single-page layout prevents scroll conflicts
- Auto-refresh - Updates every 5 seconds
- Responsive Design - Works on desktop and mobile
📋 Requirements
- Linux (Ubuntu, Debian, AnduinOS, etc.)
- Node.js >= 16
- npm or yarn
- sudo access (for system operations)
🔧 Installation
Quick Start (Recommended)
The easiest way to get started with Linuxify is using npx:
npx linuxifyThis will:
- Show an interactive setup wizard to choose your preferred setup mode
- Configure either sudoers or run directly with sudo
- Start the application automatically
Installation Options
Two setup modes are available. The setup wizard will guide you through both options:
1. Sudoers Mode (Recommended for security-conscious users)
npx linuxify
# Select option "1" when prompted- ✅ Configure sudoers file once during setup
- ✅ Run Linuxify as regular user afterwards
- ✅ Commands execute with limited, scoped sudo permissions
- ⚠️ Requires understanding of sudoers configuration
- ⚠️ Exposes commands to sudoers file (potential privilege escalation vector if other apps exploit sudoers)
2. Sudo Run Mode (Simpler, full control)
# If installed globally
sudo $(which npx) linuxify
# Or if in project directory
cd linuxify
sudo npm run cli
# Or using node directly
sudo node bin/linuxify- ✅ No sudoers configuration needed
- ✅ Simplest setup (just one command with sudo)
- ✅ Full root privileges, complete control
- ⚠️ Web interface runs as root (security consideration)
- ⚠️ Should only be accessed from localhost
- ⚠️ Should not be exposed to network/internet
3. Skip Setup (Manual configuration later)
npx linuxify
# Select option "0" when prompted- Run without any setup
- Configure manually later with
npx linuxify --setuporsudo bash setup.sh
Manual Installation
# Clone or navigate to project
cd linuxify
# Install dependencies
npm install
# Start with setup wizard
npm run cli
# Or start directly (skip setup)
npm start⚙️ Setup Modes & Sudo Configuration
Mode 1: Sudoers Mode (Recommended)
This is the traditional approach where you configure the sudoers file once, then run Linuxify as a regular user.
Automatic Setup (Recommended)
When you run npx linuxify and select sudoers mode:
- The setup wizard displays the required sudoers rules
- Automatically edits the sudoers file (just enter your sudo password)
- Verifies the configuration with validation
- Tests if passwordless sudo is working
The wizard uses a secure bash script that:
- Validates sudoers syntax before applying changes
- Creates backups of your sudoers file
- Uses
/etc/sudoers.d/linuxify(safer approach when available) - Falls back to direct editing only if needed
- Shows clear success/error messages
Manual Setup (Alternative)
If you prefer manual setup:
sudo bash setup.shOr for interactive sudoers editing:
sudo visudoAdd at the end of the file:
# Linuxify - systemctl commands
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl disable *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl stop *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl mask *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl unmask *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl enable *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl start *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl restart *
%sudo ALL=(ALL) NOPASSWD: /bin/systemctl reload *
# Linuxify - cleanup commands
%sudo ALL=(ALL) NOPASSWD: /usr/bin/apt clean
%sudo ALL=(ALL) NOPASSWD: /usr/bin/apt autoremove -y
%sudo ALL=(ALL) NOPASSWD: /usr/bin/apt autoremove --purge -y
%sudo ALL=(ALL) NOPASSWD: /usr/bin/journalctl --vacuum-time=7d
%sudo ALL=(ALL) NOPASSWD: /usr/bin/journalctl --vacuum-size=500M
%sudo ALL=(ALL) NOPASSWD: /usr/bin/flatpak remove --unused -y
%sudo ALL=(ALL) NOPASSWD: /usr/bin/dnf clean all
%sudo ALL=(ALL) NOPASSWD: /usr/bin/pacman -Sc --noconfirm
%sudo ALL=(ALL) NOPASSWD: /usr/bin/rm -rf /tmp/*
%sudo ALL=(ALL) NOPASSWD: /usr/bin/rm -rf /var/tmp/*
%sudo ALL=(ALL) NOPASSWD: /usr/bin/rm -rf /root/.cache
%sudo ALL=(ALL) NOPASSWD: /usr/bin/find /root -name "*.old" -deleteTo verify sudoers was applied correctly:
sudo -n systemctl status systemdIf this runs without asking for a password, sudoers is configured correctly!
Mode 2: Sudo Run Mode
This approach runs Linuxify directly as root with full privileges, without needing sudoers configuration.
Setup
# If installed globally
sudo $(which npx) linuxify
# Or navigate to project and run with node directly
cd linuxify
sudo node bin/linuxify
# Or use npm script
sudo npm run cliSecurity Considerations:
- ⚠️ The web interface runs as root (all operations have full system access)
- ⚠️ Only access from localhost (127.0.0.1) - do not expose to network
- ⚠️ Do not expose to internet or untrusted networks
- ✅ Simpler setup - no sudoers configuration needed
- ✅ Useful for one-time administrative tasks
- ✅ Full control without privilege escalation concerns
When to Use:
- Initial system setup/optimization before users are added
- Running as system administrator on local machine only
- One-time cleanup/optimization tasks
- When you want to avoid sudoers configuration complexity
Standalone Setup Script
To configure sudoers without starting the app:
sudo bash setup.shThis script:
- ✓ Validates sudoers syntax before applying
- ✓ Creates automatic backups
- ✓ Prefers
/etc/sudoers.d/linuxifyfor safer configuration - ✓ Verifies the final configuration
- ✓ Shows clear success/error messages
- ✓ Handles both systemctl and cleanup commands
📊 Tabs Overview
Services
- Optimizable - Non-critical services you can safely disable
- All Services - Complete system services list
- Critical services are protected (cannot be disabled)
Extensions
- UI Extensions - GNOME shell cosmetic/UI extensions (heavy hitters like blur-my-shell, arcmenu)
- Other Extensions - System extensions (keyboard layout, keyboard indicators)
Disk Cleanup
One-click cleanup actions:
- APT cache & autoremove
- Desktop thumbnails & trash
- NPM, Yarn, Pip caches
- Flatpak unused packages
- Journal logs (7+ days)
- Old kernels
Quick Actions
- Disable all UI extensions (preserves dash-to-panel)
- Force refresh system data
🎯 System Stats
Real-time display of:
- Uptime - System uptime duration
- Load Average - CPU load (color-coded: green < 0.5, yellow < 1.0, red > 1.0)
- Memory - Used / Total RAM
- CPU - Processor model
- Disk - Available / Total / Used space
🏗️ Architecture
linuxify/
├── server.js # Express server
├── package.json # Dependencies
├── modules/
│ ├── services.js # Service management
│ ├── extensions.js # GNOME extension control
│ └── system.js # System info & cleanup
├── views/
│ └── index.ejs # Main UI (Vue 3)
├── docs/
│ ├── index.html # Landing page
│ └── docs.html # Advanced documentation
└── README.md # This file🛠️ Tech Stack
- Backend: Node.js + Express
- Frontend: Vue 3 (CDN) + EJS templates
- Styling: Tailwind CSS + DaisyUI
- Task Runner: npm scripts + nodemon
📝 Configuration
Edit server.js to change:
- Port:
const PORT = 3000;(line 7) - Refresh interval:
setInterval(refresh, 5000);(line 338 in index.ejs)
⚠️ Safety Considerations
- Critical Services - Marked red, cannot be toggled
- Non-critical Only - Services tab filters by default to safe options
- Cleanup Tasks - All non-destructive, safe to run multiple times
- Read-only Operations - Monitoring and info gathering don't modify system
🐛 Troubleshooting
"sudo: no password provided"
Run through sudoers configuration above to allow passwordless sudo for specific commands.
Port 3000 already in use
Change PORT in server.js or kill existing process:
fuser -k 3000/tcpExtensions not showing
Some extensions may be installed in system directories. Refresh browser cache.
Disk cleanup not freeing space
Some services may lock files. Try one task at a time and wait a moment.
📄 License
MIT - See LICENSE file
👤 Author
🤝 Contributing
Contributions welcome! Feel free to open issues and pull requests.
🔗 Links
Linuxify - Keep your Linux system optimized, one click at a time.
