Git Product home page Git Product logo

spade's Introduction

SPADE Environment for Linux

'SP'ecially 'A'dapted 'D'WM 'E'nvironment

What is SPADE?

This is my repository for a basic, fully featured “desktop environment” using the DWM window manager. My goal for this repository is to have a base environment that I can quickly deploy on various workstations that I own, as well as provide a platform that makes it easy to maintain that environment and make changes over time. If you stumble upon this respository, I hope to make this environment rather easy to deploy on your end as well, but as with all things of this nature, ymmv.

Installation Notes

Note: This repository is a work in progress as I build the environment, installation scripts, and procedure. While I intend to write scripts that will make it easy to install the environment and its dependencies, I assume this repository will always require some tweaking, and will most likely be constantly changed as I adapt my environment to my various workstations.

The starting point for deploying my environment on a workspace will be the ./deploy-spade.sh shell script. It will run the user through a few questions ensuring some basic utilities are already installed to the user’s liking (things like st, dmenu, and an editor which I have seperate configured repositories for). The script will then proceed to build the DWM environment, download the needed dependencies, and copy their configurations to the proper places. Note, the entire script makes the assumption that the user has a working X display server already setup. Setting up the X display server is out of scope of this repo.

Dependencies

There are dependencies that need to be downloaded for both my build of DWM, as well as the peripheral applications I use for my environment. I am going to split them into dependencies needed for DWM specifically, and dependencies needed for my overall environment (other applications and their own dependencies).

DWM Dependencies

To build DWM on its own, the gcc build tools need to be installed. This repo makes an assumption that standard commands like gcc and make can be executed on the target system. Other dependencies include the development files for libx11, libxft and libxinerama. The deploy script will attempt to install these dependencies, making use of a package command variable in the shell script that can be modified for your environment (defaults to using the xbps-install command for void linux).

SPADE Dependencies and Features

The following is a table of features that this environment provides, along with any associated dwm patches and dependencies that are used to provide the specific functionality:

Featuredwm PatchDescriptionDependencies
Autoset WallpaperautostartUse nitrogen to automatically start the wallpaper.nitrogen
Restart SignalrestartsigRestart dwm with mod+ctrl+shift+qn/a
Rofi Promptn/aUse rofi as a system and run promptrofi
File Browsersn/aUse lf as terminal browser, thunar as gui browserlf, thunar

Rofi

Note for rofi: I have included both the script used to launch rofi from DWM, as well as a whole folder of configuration of rofi themes, the latest can be found at this github repository.

lf

Application config files for lf are included. There are additional instructions included in these configs to make the previewer work in the terminal.

Tag/Window Bar Functionality

Featuredwm PatchDescriptionDependencies
Alternative TagsalternativetagsShow tag numbers on key pressn/a
Hide Vacant Tagshide_vacant_tagsOnly show those tags with clients in themn/a
Underline TagsunderlinetagsUnderlines the current selected tagn/a
Rainbow Tagsrainbowtags (mod)Modifed version of rainbow tags (color tags)n/a
Status(Menu) ButtonstatusbuttonProvides clickable button before tagsxmenu
Layout MenulayoutmenuProvides a menu for layouts when clickedxmenu
Awesomebar FunctionsawesomebarAllows show/hiding windows clicked on barn/a
Window IconswiniconAllows showing app icons in barn/a
Focus on UrgentfocusonnetactiveAutomatically Switches to Urgent Windowrofi
Switch To TagswitchtotagAdds to client rules to switch to new tag automaticallyn/a
Window GapsvanitygapsAdds gaps and gap logic to client windowsn/a
Multiple LayoutsvanitygapsIncludes many different dynamic layoutsn/a

Note, when a patch name is in bold, that indicates a config file or script should be present pertaining to that patch. When a dependency name is in bold, that indicates a config file or script shoudl be present pertaining to that dependency.

Status Bar Functionality and dwmblocks(async)

For my status bar region, I use the dwmblocks-async build to provide the status text to dwm. To accomplish this to my liking, I had to add a few additional dwm patches to support this.

Featuredwm PatchDescriptionDependencies
Colored Status Textstatus2d+systrayProvides the ability to enable color in status textn/a
System Traystatus2d+systrayProvides a system tray in the dwm barn/a
Clickable StatusstatuscmdProvides ability to execute commands when clicking status regionsn/a

dwmblocks-async

My build of dwmblocks provides the system to script the functionality and contents of my status bar. To accomplish this, scripts are provided in the dwmblocks/scripts directory.

Emacs Service File for Void Linux

I have added files that allow me to launch emacs as a runit service. This works well because it pre-loads my emacs configuration and makes opening emacs buffers really fast.

While the service files should have been copied over, you will need to run the command that adds a new services directory, and symlink the emacs service folder to this directory so it is run.

The following is already added to the autostart script in .local/share/dwm:

runsvdir -P "${HOME}/.local/service/"

If I just sym link the emacs service folder .local/emacs to ths above directory, it should work. Comments at this link should also explain more: https://www.reddit.com/r/voidlinux/comments/uomxrx/how_to_daemonize_emacs_as_user_service/

Additional Modifications

View Occupied Tags

I have added a function that works pretty well when using the hide_vacant_tags patch. Since that patch minimizes the tags shown in the tag bar to only those that have clients associated with them, I changed the way I select a tag to view by allowing the number keys to align to the visible tags shown in the bar. This means, using the viewoccupied function, using Mod+1 to view a tag views the first occupied tag, not just tag #1. Similarly, Mod+2 views the second occupied tag, and so on. This makes it really easy to switch occupied tags matching visually to what is shown in the tag bar.

Now, if I want to select a tag # where there is a conflict (say I want to select Tag #1, but the first occupied Tag is Tag #3), I have two choices. I can use Mod+Alt+Tag# to force-select the tag to view, or I can use Mod+0 to show/view all tags, and then select the specific one I want to view. This gives a couple quality of life options, but also flexibility, in choosing the tags I want to work with.

spade's People

Contributors

knaveightt avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.