Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: What linux desktop tools/apps boosted your productivity?
90 points by anikdas on Dec 13, 2018 | hide | past | web | favorite | 95 comments
I have switched to Ubuntu 16.04 from MacOS two years ago. Compiz is one of the things helped me manage my workspace and windows which really boosted my productivity. I wonder what other tools I might be missing out.

Thank you.

Emacs org-mode[0]

From the website's description:

Org mode is for keeping notes, maintaining TODO lists, planning projects, and authoring documents with a fast and effective plain-text system.

I just copied some of the set-up from here[1]

[0] - https://orgmode.org/

[1] - http://doc.norang.ca/org-mode.html

Second emacs org-mode.

I use almost nothing out of it. I have the default spacemacs configuration. I literaly just write bullet lists and cycle TODO and DONE states on them. Still the best todo-manager :)

I've done a ton of writing and system description. I've got kit in Illustrator, I've bought tools on the mac like Scrivener[0] and Scrapple for writing fiction and technical documentation. I can really move with Omnigraffle. I've bridged that gap with writing my own tools in Python with JS web display layers. I am a competent developer in a few languages and I have known about emacs and org-mode for going on a decade.

I take big stabs at it becoming my goto. I feel like I've done a lifetime of development to just dance around figuring out this tool.

Do you have any suggestions for making it stick? I'm making 2019 my year to really get emacs and put some time into fun Lisp. Any tips relating specifically to org-mode and not just "how to not quit using emacs" would be greatly appreciated.

[0] https://www.literatureandlatte.com/store

I don't really have any 'tips to make it stick', because I don't really try to?

Most of my day-to-day development happens in VS Code, most of my in-console or over-the-ssh editing in vim. For interactive/exploratory programming I often grab jupyter notebook.

But having emacs with an org-file open at all times is nice. The bullet lists are pretty :-) And I am slowly branching out to other things that org-mode is capable off. I.e. I started writing a presentation outline in org-mode, then I realized that I could just write the whole thing there and export it to reveal-js html with few key-strokes.

> "how to not quit using emacs" would be greatly appreciated.

Emacs kinda feel like a weird animal when getting started but that's just muscle memory. The best way to have it stick is to get a better understanding of its power. I wrote a 5 episode tutorial series that should get you on the right path: https://mickael.kerjean.me/2017/03/18/emacs-tutorial-series-...

Very cool! I just skimmed the series and sat with Ep1 a bit. I will work through it this coming week and see how it lands.

I like the format. Thanks!

I'm a huge emacs fan but this seems silly. You're comment makes it sound like you're struggling with emacs - don't, just use whatever you're comfortable and productive with.

Well a big thing that happened for me this year is losing OSX as my primary environment. So everything is in flux and has been for about six months. I don't see Apple turning around for what I need and I've been 100% linux desktop over this time period. I'm a long time linux and BSD user, but haven't had it as my primary OS in nearly a decade.

My job has shifted towards ops and managing kubernetes clusters at scale. Since I'm refiguring everything I used to do this year, I figure I might as well try things I always meant to that have been around forever and seem to do it just fine without buying into commercial tools (that largely aren't available for my platform anyway).

Because of my work focus on virtualization, my primary machine is starting to be a mini cluster and I have a 5 node rack adjacent. Being portable between all these environments is becoming an asset very quickly.

Maybe it's silly, but I'm not moving around comfortably in almost anything like I was. World's my oyster I guess.

If you want zero-config portability, learn vim. It's installed everywhere and is very useful. But if you're set on emacs, here's some stuff that helped me.

The video on golfing is great to learn how to "think Emacs": https://www.youtube.com/watch?v=dE2haYu0co8

Avoid using Ctrl; either palm-press or map Capslock to Ctrl. http://ergoemacs.org/emacs/emacs_pinky.html

Don't lean heavily on movement commands, the easiest way to navigate around Emacs is searching. Instead of pressing C-p five times or even C-u C-p C-p, just search for the word you're going to with C-s.

Official reference card is good: https://www.gnu.org/software/emacs/refcards/pdf/refcard.pdf

Steal heavily from other people's configs. Since you're new and you like org-mode see these two files: https://github.com/magnars/.emacs.d/blob/master/settings/san... http://pages.sachachua.com/.emacs.d/Sacha.html#org2b182a5

Hope that helps.

I tried getting into org-mode and leave OneNote. Had to give up at the end of the day due to the lack of image / rich content support. I find it incredibly useful to be able to paste rich content into OneNote and then write work tasks around it. Is there any such option for emacs?

I had the same frustration with org when I started, which has since disappeared and I keep working with saving the screenshots and linking them to my docs. :|

Anyhow, some time ago I came across a blog post where the author wrote some elisp just to copy the stuff from clipboard, save it, link it to the buffer. I don't have the link handy, but maybe this SO answer might help you:


Here is a function that I use for exactly this:


I'm no org-mode expert but I can drag and drop images into my org files with the default spacemacs configuration. I believe this is powered by org-download.

I tried so hard to make this work, but a few months in realised that I was swapping to visual editors to fix problems far too often.

I'd add a manual tiling window manager, Emacs, Firefox (with Tridactyl) and a terminal.

My WM of choice is StumpWM (with XMonad-like shortcuts on Super) and my terminal of choice is simply xterm running Bash.

This setup is incredibly minimal and efficient in all respects.

KeePassXC has been great for password management.

Redshift for blue light filtering, although KDE now has that built-in.

zsh and the oh-my-zsh suite has been really helpful

A bunch of cli tools are nice. Ripgrep is a super fast grep tool that comes in handy for searching inside of files... can basically search your whole filesystem at lightspeed.

In addition to the usual suspects of tmux, random window managers + friends, here are the applications I have to install to function

rofi - Fast, phenomenally good launcher

terminator - Terminal that allows splitting, tabbing, and more importantly bonding

redshift - Literally, shift my red light levels by time of day

retext - I write a lot of markdown. Seeing it real-time previewed makes life significantly better for me.

steam - A distraction now and then certainly helps

I’ve struggled for a long time with paper scraps to keep track of what I’ve been doing and read about the following alias to add in your .bashrc

`alias did="vim +'normal Go' +'r!date' ~/did.txt"`

Then type `did` in your terminal and write what you just did.

More generally, you can get a great boost of productivity by mastering your text editor. I have a preference for Vim, but have nothing against emacs.

https://gnunn1.github.io/tilix-web/ is a good tiling terminal emulator/terminator alternative if you're looking for something designed for GNOME 3

For terminator, what is bonding? is that what allows you to send keystrokes to more than one tab simultaneously?

- i3 window manager - I just couldn't go back now. Over the course of the last 5 years I have saved time and made window management much less painful.

- Parcelite clipboard history - very useful for various reasons. It's such a basic tool for me now I don't know how people live without one.

Not a tool, but for any shell work learning the readline key bindings is a good time saver: Ctrl+a/e/n/p/b/f. It's just so much more clunky using other keys

+1 for i3. I have a 13" laptop as my primary driver and using i3 is so much faster & convenient on such a small screen. Though I have made 2 changes to my workflow to get better out of it:

- I use i3 inside XFCE. This allows me to use the xfce launcher, status bar, tray icons and other goodies, e.g. adding external monitor pops open the display properties, volume bar is available anytime. All this saves me from binding buttons & doing other changes in my i3 config.

- Since Win+{1,2,...0} (buttons which change workspaces in i3) are now hardwired in my brain, I have arranged the icons on the taskbar of my Windows-10 machine to what I have in i3.

Win+1 is assigned to Emacs on i3, so that's the first icon on my windows taskbar.

Win+2 -> shell/git bash

Win+3 -> Thunar/Windows Explorer

Win+4 -> Firefox/Firefox

Win+7 -> Anki/Anki

This saves a lot of brain cycles, as my Windows workflow is also a bit like what I usually use on Debian.

Last week I try using EXWM but wasn't able to make it work as per my expectations, so switched back to i3, but EXWM is definitely a TODO on my list.

4 / 5 window arrangements i use the same except Thunar. I dont remember why i choose that particular arrangement. Did you copy from some where ?

i3 inside XFCE? Sounds just like what I was looking for. How do you set that up?

+1 for i3. Tiling window managers dramatically increased my productivity. No more “where did that window go?” headache.

FYI, one line change each to your bashrc and inputrc will get you vi keybindings instead of emacs

That's interesting, I never knew that. I actually use Fish shell, and with my Colemak keyboard vi keybindings need to be remapped extensively (also why I don't use vim).

I use another niche keyboard layout (Workman) and have never really felt the urge to rebind anything in vi(m). I can definitely see wanting to rebind the standard nav keys which causes cascading changes and can cause you to lose a lot of the mnemonic advantages of the commands.

My solution to that issue is "just" alternate bindings which obsolete both the standard and vi navigation keys. At the home row, I have the arrow keys on my right hand and a "nav cluster" of my own devising (page up/down, tab left/right, workspace left/right) on the left.

Definitely not for everyone, but a possible way to have your cake and eat it too.

what's the change ?


    set -o vi


    set editing-mode vi

Now bash and anything using readline will use vi key bindings. This Just Works for most of the common cli tools, e.g. the python shell and psql, but there are exceptions. In the past, the mysql client hasn't respected these settings, and there's also a node library called vorpal that is reinventing readline, poorly and for no obvious reason.

Tmux, vim + handful of plugins, i3wm, mutt, qutebrowser. Without the ability to completely control my systems from the keyboard, I would suffer a bit hit to productivity and these applications allow me to do that.

also ranger for file management and saka key firefox/chrome extension

I prefer using no specialized application for file management. ls, cd, (rip)grep, find, less, tail, and others work perfectly fine.

The one app is i3wm. People say tiling wm do not help boost productivity, but it certainly did for me -- or at least I think that it did.

From hardware aspect (although it was never asked), I use a hhkb type-s with the hasu controller. You may think it's a small change, but the fact that you can remap the arrow keys to {h,j,k,l} also helps because you no longer need to stretch your arm to your arrow keys. It did cost a bit of money, but I'm happy that I have it. And aside from the arrow key remap, I also remapped other keys to help with basic functionalities.

Rofi is pretty great.

I'm also shamelessly addicted to guake (drop down terminal). I know there are more robust alternatives, but having grown up with Quake/CS, it just feels right.

I wanted to use Yakuake but it's for KDE and didn't want to install a complete DE just to use its dropdown terminal. Guake is a fairly good alternative, but I'm having an issue with it that it somehow makes title bars and top menus unclickable, which forces me to terminate it every now and then start it again.

I have not had those issues, and I'm actually using guake with KDE atm. You might be able to get yakuake working on non-kde. What DE are you using?

I have XFCE, but when trying to install, it included the whole KDE DE as dependency, which I don't really need.

You can launch xfce-terminal in drop-down mode..

The debian/ubuntu packages were pretty outdated at some point, I had to install the latest version manually to fix a bunch of issues just after updating to 18.04

Off the top of my head, I'd suggest the following:

- Flameshot for screenshots and annotation [1] - Albert Launcher [2] - Jumpapp for quickly launching or switching between windows [3]

They are all desktop agnostic.

[1]: https://github.com/lupoDharkael/flameshot [2]: https://albertlauncher.github.io [3]: https://github.com/mkropat/jumpapp

Switched around the same time as well from MacOS. I really missed Spotlight. A suitable alternative I use on my Lubuntu 16.04 machine:


This is really nice. I was looking for something like this for sometime now.

This is a nice app. Thanks for sharing!

sure! :)

I mostly use the command line, so Zsh and its extensive support for tab completion is the most important thing.

rsyn^I e.o^I:/va^Iw^I/ ./ -av --prog^I

autocompletes to

rsync example.org:/var/www/ ./ -av --progress

with alternatives listed if I press tab sooner (e.g. --protocol, --protect-args are shown with the purpose of those flags).

On a local filesystem,

ls /v/w/h/i^I

autocompletes to

ls /var/www/html/index.html

The non-default shell tool I use most often is "jq", a JSON processor. I can interact with a REST API, and answer a lot of one-off queries just in the shell.

I should probably write a tab-completion module for our REST API...

*nix specific: tmux, clipit cross platform: jupyter-lab, vim.

Switching back to Mac OS X is what really boosted my productivity as it allowed me to forget all about constant fiddling, broken drivers, breaking updates, inconsistent UX/UI, amateurish applications, etc.

My Ubuntu box (an Ubuntu-approved Dell tower IIRC) required constant attention and ultimately died after two years while my mid-2011 Mac Mini went through 4 major Mac OSX/MacOS versions and countless security patches without a single issue and all the company-provided MacBooks I've had since 2010 have been zero-maintenance.

I detest Apple but understand your perspective.

However, linux has improved over time for desktop use, and more things have moved to the web. So really I feel like I rarely leave the browser. And if I do, it is just to a text editor or IDE.

Having a lightweight setup eliminates a lot of problems. I try to install almost nothing, honestly.

The less you have installed, the less attack surface you have, the less updates you need, and the less chance for breakage.

Usually if something breaks in desktop linux for me, it is because I know I was doing something non-standard. Trying to use unstable packages, custom settings, etc.

Apple solves that problem by barely letting you do anything at all, thus removing the PEBKAC.

With weird Atom issues now (on Ubuntu 18.04 I can't install or update my packages), would love if anyone had a good browser based IDE service which is cheap and private.

Have you tried visual studio code? I have replace all my IDEs (Pycharm, WebStorm) with vscode and never looked back.

There are some issues if I am nitpicking but overall the experience is just outstanding.

Does vsc have good Django support?

Not built-in, but you can install extensions that cover your needs. Here are the VS Code extensions that have something to do with Django https://marketplace.visualstudio.com/search?term=django&targ...

Unfortunately, you'll have to test them for yourself since I don't have a use for them.

yes. I have been using it specifically for Django. You need to install the official python extension though.

try VSCodium.. its vscode without all of the MS telemetry stuff in it. I use it on fedora 29 and it runs great. Im not a django developer though but the community is great and there is a ton of extensions for pretty much everything.


Counter-anecdote: I've been running an Arch install for 2+ years with zero problems. Picking hardware that has direct kernel support will save you a bunch of headaches.

Also, a rolling release distro, which you'd think would be less stable, provides better hardware support as the kernel and firmware packages are much more recent (not to mention libraries/build dependencies). Personally, I'd never go back to a fixed-release distro.

> Picking hardware that has direct kernel support will save you a bunch of headaches.

Yep, that seems key. I've just spend full 5 days (I'm in between contracts, so I have the time) trying to install Arch on my Early 2013 15" MacbookPro. I turned out that, due to buggy/nonstandard hardware, a fully functional dual boot with Windows is not possible (if your disk is GPT, you won't have sound on Windows and if it's MBR, the DisplayPort monitor won't come back from suspend on Arch). Just coming to that conclusion took around 4 days of experiments. I've spend one more day trying to set up wireless, and have just given up. There are more interesting things to do with computers than finding workarounds for a minefield of hardware/firmware/drivers bugs.

I had a late 2013 MBP and went with the XPS 13 for that reason. The process to dual boot (or even wholesale replace) a MBP on Linux looked really scrappy. I get it, Apple's UEFI firmware is essentially a black box with zero configurability. If that's how the process starts, I can't imagine how painful the rest of it is.

Don't install Arch, install Antergos or some other Arch derivative that packages it up with an installer.

High school me would have loved installing Arch (I did LFS back then). Current me doesn't have time for that bullshit.

> Picking hardware that has direct kernel support

that's headache for me

Yeah I've got a dell xps 13 and I've never once had to fiddle with drivers

The 2+ year machine is a desktop, but I also switched my laptop to an XPS 13 a month ago and I've had the same experience; runs beautifully.

I've been using every major os (but mostly GNU/Linux and FreeBSD as my main desktop systems since 2007), and I have to say that I do not share your experience. I've had the same Arch install since they have launched on x86_64 (so quite a while ago) that I just rsync around from one system to another without no fuss or issue. It's only a matter of knowing what you're doing and what the best tool for the job actually is. For instance, I'll never really rely on Ubuntu for development, because you'll definitely end up adding PPAs to compensate for out of date packages or such, and that will definitely wreck your system to smithereens the next time you `do-release-upgrade` (even though an intelligen usage of `systemd-nspawn` has largely fixed that).

Can you share that script or explain a little on how to do that? I assume you cant just `rsync -r /` and you'd have to ignore certain things like `/dev` and `/proc` or whatever.

Have you ever run FreeBSD on a laptop? From what I hear it runs nice, but I'm specifically wondering about the battery life. Any experience?

Like another commenter mentioned, I would also love to learn more about your rsync / backup system if you are willing to share.

It's quite easy to accomplish this by simply rsync'ing to a btrfs volume, and then taking a snapshot.

Furthermore, you can take advantage of rsync ignore files to exclude things you don't want to back up.

My experience is the exact opposite.

Osx breaks my dev environment at every update. there's just news on this site saying it dropped support for some nvidia card.

In the meantime, I've had the same debian install for 5 years, and zero trouble.

I downvoted this, as its essentially off-topic trolling.

Let's discuss the question instead.

iptables. I actually block some websites by setting some rules in /etc/rc.local like:

iptables -A OUTPUT -p udp --dport 53 -m string --hex-string "|08|facebook|03|com" --algo bm -j DROP

Not joking

Shutter is a great little gui tool I use everyday, it let's you easily take screenshots or partial screenshots and mark them up before copying/saving them.

Yeh shutter is a great application! Very easy to use and most importantly, light weight.

I mostly use the command line. I use Heirloom-mailx for email, i3 for window management (although I wrote my own program for the status bar), vim for text editing, just the shell commands for file management, xterm for terminal emulation, xclip for clipboard management, SQLite for database management, and I wrote my own programs for screen capture and many other things. I do not have a launcher menu; I just start all programs from xterm.

Alpine is absolutely amazing for managing the hundreds of emails I get everyday. Also, workrave helped with concentration by forcing me to do regular pauses.

I suggest:

- AutoKey (key shortcuts)

- Conky (desktop widgets)

- lsyncd (syncing files)

Conky is great. For someone starting out in customising their desktop, Conky goes a long way. I used it for years till I started writing my own widgets.

I was using Conky for a todo list on my second monitor, then I added another more specific todo list called "weekdo", one for notes(like how to spell certain words that consistently stymie me). After growing to four lists, each a Conky instance, I wrote a more specific purpose displayer. That was worse on resources, but a rewrite incorporating all the lists into one process was an improvement, even on Conky.

But this is about Conky. Conky pretties up your desktop, displays useful information, and inspires you to take more control of your desktop. Long live Conky.

lsync looks really good. Currently I was using rsync with a custom gulp script to mimic similar functionality.

I've been using unison lately. Nice and quick over 1000s of files between OSX and Linux. A little slower when paired with Windows though

I'd suggest a clipboard manager. I use Glipper, but there are a lot of others.

I use docky as my dock and it has a clipper docklet. It's really handy.

copyq is very good as well.

CopyQ is the best clipboard manager, IMO! I used to use Glipper, CopyQ crushes it!

To add another one of my favorite: gotop[1] (drop in replacement of htop) is really good.


- Zim - very light note taking application

- Clipit - clipboard management

- i3 Desktop window manager - gave me a superb boost of productivity

- Indicator Netspeed unity - live network consumption/speed indicator applet

Mkusb for making USB thumb drive bootable ISOs. If you want to try a lot of "flavors" it can definitely save a lot of time configuring ;)

Listed app seems to be only the obvious ones that has good alternatives on other OS but aren't there any that is better on Linux desktop?

* Fish shell: Specifically, its abbreviation feature. `abbr --add word phrase`. e.g. `abbr --add g git`, then I don't have to deal with autocomplete support for non-native command names as it literally expands to git after I type it followed by a space or return.

It also allows for faster throw-away function editing and saving if you want to keep it. `function`, `funced`, `funcsave`, `functions`

* Tmux: Use pane splitting so much, always frustrates me to see others moving so slowly through terminal windows and tabs. bonus: I also have pane splitting to re-attach to existing SSH connection if it was split from a SSH session.

I used to use tmuxinator and probably will again, more valuable if multiple projects simultaneously.

* Guake/Gnome Drop Down Terminal: Terminal dropdown is just such a huge time saver.

* z: jump to recent directories, https://github.com/jethrokuan/z

* fzf: get ctrl + r history search functionality back that bash provides, also provides ctrl + o to open files in $EDITOR https://github.com/jethrokuan/fzf

* copyq: Best clipboard manager evah! You NEED a clipboard manager, can't believe I went years without it, I trigger mine with ctrl + alt + c

* pipe to clipboard: `<command with output> | xsel --clipboard`, wrap xsel in a `cb` abbreviation in fish for autoexpansion. `abbr -a cb xsel --clipboard` may need to install `xsel` first.

* workspace tiling: I map 9 workspaces to the same grid on the keyboard with these keys + an <alt> modifier. I also assign certain applications to always auto-assign to specific workspaces:

w e r

s d f

x c v

* clock: set it to show seconds, you can easily perform loose timing way. Use `time <command>` if you are on the terminal.

* timezone: if you work with a team who is in one timezone, just set it to use their timezone during working day. I made a script to toggle this back and forth easily

I also display my timezone in my tray if I am toggling timezones.

* Arch Linux: On previous distros I would have to futz with package sources way too much. With Arch it is the easiest and most productive ever by using the `yay` package manager/wrapper. I can type `yay -S <package name>` and 99% of the time it will be available and even automates building it from source if there isn't a binary. It just works, I will never go back. Arch has some of the best packaging out there, I will use Arch for this reason alone, it saves many hours of time.

* ethernet cable: I use ethernet cabling whenever possible. Lower latency times and in video conferences you can say "not me" when the stream breaks down. Results in you not having to troubleshoot wifi. Using wires is amazing!

* Jabra 410 WIRED speakerphone: one reason, hardware mute button. Don't have to fiddle through windows to see if you are on mute. Big red ring around the speakerphone shows if you are muted or not.

* Screen annotations + touchscreens: The reason to use a touchscreen with linux is screen annotations. Arch + Gnome 3 works well enough with `yay -S gromit-mpx` as an alternative to Compiz Annotate. This saves time because during presentations you can communicate much more efficiently by drawing a red circle around something. You don't need a touchscreen and can use a mouse pointer, but that does slow things down, still better than no annotations though.

* noise cancelling headphones: this is the best investment I have ever made. Do this.

* Focus music: "hey google, play focus music" and also I purchased lifetime subscriptions for brain.fm and focus@will. I toggle between the 3. Combined with noise cancelling headphones you can get into some killer focus zones with these!

* rubber ducking: similar to other posts here for marking @todos etc, which I may look into their suggestions for a CLI method. But for now I use a running Google Doc where I write it out for getting stuck and making progress. Here is an article I wrote expanding on this blurb. https://medium.com/@ElijahLynn/write-it-out-f9c74082e6ca

* 2-5 minute runs: Sometimes just gotta get up and run. I run around the block, it doesn't have to be long. A goal of once around the block is super good for brain health, more is better but 2 minutes is really a good start. My long-term goal is to do a 2 minute run every hour during the day.


Here is my most recent Arch setup with most of these tools listed, it is pretty messy and I didn't document everything in there but maybe it is useful to someone, there is also a video recording of how to install Arch + Gnome 3 at the top of the document that my friend and colleague Cameron Eagans walked me through with some great discussion around UEFI & BIOS. https://docs.google.com/document/d/1QtQyveacu8dgTeoy8939Ti42...

Gosh that was way longer than it was intended to be, original intent was just to write about `fish abbr --add` which you should switch to fish for that reason alone!!

Really appreciate for taking the time to answer my question.

I use zsh myself. Have not tried fish yet but only heard good things about it.

Also, regarding the pipe to clipboard, I liked the 'pbcopy' command on Mac. So, right now I have added an alias pbcopy='xclip -selection clipboard'. It's really handy.

I use Zenkit (project management tool) to organize all my tasks and keep track of the progress. It's also available as Snap.

gitg is pretty helpful for visually checking changes before committing. I prefer it to text-more diff and use it for projects that don't require IntelliJ.

KDE Connector

Shutter for screen shots

parsec for streaming a local windows box

alias s='cd ..'

Compiz? Are you joking? In what way could Compiz boost your productivity?

All the bindings, hot-corners, expo to name a few.

Figma for UI design.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact