I dusted off a 4 years old Lenovo ThinkCentre Edge 71z Tower desktop and Lenovo IdeaPad G400s notebook. They are, respectivelly, a 2nd generation Core i5 SandyBridge 2.5Ghz and Core i3 2.4Ghz, with 8GB of RAM in the Tower and 4GB of RAM in the notebook. For a developer's routine, they are quite good enough. A better CPU wouldn't do a whole lot.
I was very happy to see that this old tower has an old Intel graphics card with a DVI port. Fortunatelly I had an old DVI-to-HDMI cable around and I was able to hook it up to my ultrawide LG monitor 21:9 (2560x180) and it properly scaled everything (macOS Sierra had a regression that required a hack to make it work!)
What hurts a lot are the super slow mechanical hard drives (7200rpm and 5400rpm). I just ordered a RAM upgrade and 2 Crucial MX300 compatible SSD drives. When those arrive, I will have the snappiness I need.
That being said, when you have a fresh Fedora 25 install, what to do next?
for Ubuntu users
Just remember this: instead of apt-get
you get dnf
. Fedora prior to version 22 used to have yum
, but dnf
supercedes it with basically the same command options.
You don't have the equivalent of apt-get update
because it auto-updates. The rest is pretty much the same: dnf install package
instead of apt-get install package
, dnf search package
instead of apt-cache search package
, and so on. For a global upgrade, do dnf upgrade
instead of apt-get update && apt-get upgrade
.
For services, instead of doing sudo service restart memcached
you can do sudo systemctl restart memcached
.
That's pretty much it for the most part. Read this wiki page for more command differences.
Crystal Language support
Let's say you want to learn this brand new language called "Crystal": Ruby-like familiar syntax and standard libraries but Go-like native binary generation, with fast concurrency primitives and all the benefits of an LLVM optimized binary.
You should follow their wiki page but this is what you need:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
sudo dnf -y install \ gmp-devel \ libbsd-devel \ libedit-devel \ libevent-devel \ libxml2-devel \ libyaml-devel \ llvm-static \ openssl-devel \ readline-devel sudo dnf -y install fedora-repos-rawhide sudo dnf -y install gc gc-devel # get all dependencies from Fedora 25 sudo dnf -y install gc gc-devel --enablerepo=rawhide --best --allowerasing sudo dnf -y install crystal |
And that's it, a lot of dependencies but as it's pre-1.0 I believe they will improve this in the future.
Ruby and Node.js support
Rubyists have a number of Rubies version control, but I personally like RVM. First, we need to install some other requirements and go on with it:
1 2 3 4 5 |
sudo dnf -y install patch autoconf gcc-c++ patch libffi-devel automake libtool bison sqlite-devel ImageMagick-devel nodejs git gitg curl -sSL https://rvm.io/mpapis.asc | gpg2 --import curl -L https://get.rvm.io | bash -s stable --ruby sudo npm -g install brunch phantomjs |
There you go, you should have the lastest stable Ruby, Node, Npm and useful tools such as Brunch (required if you want to build Elixir-Phoenix web apps) and PhantomJS for automated acceptance tests in many languages
Notice that we're installing Git, the optional GitG which is a fantastic companion to your Git routine.
Postgresql, Redis, Memcached support
What's a web app without proper databases and cache services? Let's install them:
1 2 3 4 5 6 7 8 9 |
sudo dnf -y install postgresql-server postgresql-contrib postgresql-devel memcached redis sudo postgresql-setup --initdb sudo sed -i.bak 's/ident/trust/' /var/lib/pgsql/data/pg_hba.conf # NEVER do this in production servers sudo systemctl start postgresql sudo su - postgres createuser youruser -p createdb youruser --owner=youruser |
Change youruser
for the username of your current user account, of course.
Java support
This is easy, let's install the lastest OpenJDK 8 and web browser plugins.
1 |
sudo dnf -y install java-1.8.0-openjdk icedtea-web |
Go Support
Even easier:
1 |
sudo dnf -y install go |
Do not forget to edit your profile, such as $HOME/.profile
and add the proper environment variables:
1 2 |
export GOROOT=$HOME/go export PATH=$PATH:$GOROOT/bin |
Elixir Support
There is an easy way, and a more complicated and time consuming one. Let's start with the easy one:
1 2 3 4 |
sudo dnf -y install erlang elixir mix local.hex mix local.rebar mix archive.install https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez |
The problem is that packages for distros such as Fedora can take time to come out. For example, Elixir 1.4 has been out for a couple of days, but no upgrades for Fedora yet.
Another problem if you're professionally developing Elixir projects is that you will need an Elixir version control, because you will end up getting client projects in different Elixir versions and you need to setup your environment accordingly. That's where asdf comes in. You can follow this gist but I will paste the important bits here:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
sudo dnf -y install make automake gcc gcc-c++ kernel-devel git wget openssl-devel ncurses-devel wxBase3 wxGTK3-devel m4 git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.2.1 # For Ubuntu or other linux distros echo '. $HOME/.asdf/asdf.sh' >> ~/.bashrc echo '. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc # restart your terminal or source the file above: source ~/.bashrc asdf plugin-add erlang https://github.com/asdf-vm/asdf-erlang.git asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git asdf install erlang 19.0 asdf install elixir 1.4.0 asdf global erlang 19.0 asdf global elixir 1.4.0 |
Compiling Erlang from source will take a humongous ammount of time, specially if you're using old CPUs like me. But this is how you both have access to the latest and greatest Elixir while also having the ability to choose older versions for client projects.
By the way, you can install additional asdf plugins to version control other platforms such as Go, Rust, Node, Julia and many others. Check out their project page for more details.
Docker Support
You will probably want to have access to Docker as well, so let's do this:
1 2 3 4 |
sudo dnf -y install docker docker-compose # you can test if everything went ok with the infamous hello world sudo docker run --rm hello-world |
Desktop Apps
Once you have everything in place, let's configure the non-terminal aspects for a better experience.
Terminator (and Terminix)
Speaking of terminals, you will want to install Terminator. I really don't like using screen or tmux in my local machine (I can't get around those key bindings). I am more used to iTerm2 on macOS and Terminator is pretty much the same thing with similar key bindings. You definitelly need to replace the default terminal for this one.
1 |
sudo dnf -y install terminator |
You will also want to edit ~/.config/terminator/config
and add the following to make it better:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[global_config] title_transmit_bg_color = "#d30102" focus = system [keybindings] [layouts] [[default]] [[[child1]]] parent = window0 type = Terminal profile = default [[[window0]]] parent = "" type = Window [plugins] [profiles] [[default]] use_system_font = false font = Hack 12 scrollback_lines = 2000 palette = "#073642:#dc322f:#859900:#b58900:#268bd2:#d33682:#2aa198:#eee8d5:#586e75:#cb4b16:#586e75:#657b83:#839496:#6c71c4:#93a1a1:#fdf6e3" foreground_color = "#eee8d5" background_color = "#002b36" cursor_color = "#eee8d5" |
Another great options that was recommended to me is Terminix. This is how you install it:
1 2 |
sudo dnf copr enable heikoada/terminix sudo dnf -y install terminix |
Hack font
You will want to have a nicer font such as Hack around as well:
1 2 3 |
dnf -y install dnf-plugins-core dnf copr enable heliocastro/hack-fonts dnf -y install hack-fonts |
Gnome Tweak Tool
Now you will want to install Gnome Tweak Tool to be able to setup Hack as the default monospace font:
1 |
sudo dnf -y install gnome-tweak-tool |
Vim, Zsh, Yadr
I really like to use Vim so you can install it like this:
1 |
sudo dnf -y install vim-enhanced vim-X11 |
And I really like to use YADR to customize all aspects of my ZSH and Vim:
1 |
sh -c "`curl -fsSL https://raw.githubusercontent.com/skwp/dotfiles/master/install.sh `" |
I recommend you have Zsh, Vim, Ruby pre-installed before running the script above. Once you finish, I had to tweak the settings a bit:
1 |
sed 's/gtk2/gtk3' ~/.vim/settings/yadr-appearance.vim |
You'd want to tweak that file as well, to add new fonts such as Hack, and right now I am more in the mood of "gruvbox" instead of "solarized" as Vim theme.
GIMP Photoshop
If you're a web developer you will have to edit a couple of images sometimes. And if you're like me, Gimp is a freaking usability nightmare. But there are ways to make it a bit more palatable.
1 2 |
sudo dnf -y install gimp sh -c "$(curl -fsSL https://raw.githubusercontent.com/doctormo/GimpPs/master/tools/install.sh)" |
There you go, a Photoshop-like theme for Gimp to make it less ugly.
Spotify
What would we, developers, be without music to concentrate?
1 2 |
dnf config-manager --add-repo=https://negativo17.org/repos/fedora-spotify.repo dnf -y install spotify-client |
CoreBird
I am so glad that someone built a very competent and elegant Twitter client for Linux. Install CoreBird:
1 |
dnf -y install corebird |
It's probably even better than the official Mac version.
Tweaking the title bar
I found this hack to try to make the Gnome title bars a bit less fat, which is about the only complaint I have for the look-and-feel so far:
1 2 3 4 5 6 7 8 9 10 11 |
tee ~/.config/gtk-3.0/gtk.css <<-EOF .header-bar.default-decoration { padding-top: 3px; padding-bottom: 3px; font-size: 0.8em; } .header-bar.default-decoration .button.titlebutton { padding: 0px; } EOF |
Conclusion
Most of everything you need is web based, so Gmail, Slack, all work just fine. Fire up Chromium, Firefox or install Franz or WMail if you have to. Unfortunatelly everything that is web based consumes a lot of RAM, and this is really bad. I do miss good old, slim, native apps. Web-based apps are a huge hassle.
They "work", but I'd rather have a good native app. On the other hand, Dropbox and Skype have really terrible client apps. They are very poorly maintained, full of bugs, and terrible support. I'd rather not have them.
I was trying to get used to Thunderbird while on Ubuntu. Geary is still not good enough. But I was surprised when I tried Evolution again. It has the only thing I really want from any email client: a damn shortcut to move emails to folders: Ctrl-Shift-V (!!) How hard can that be??
Gnome 3 has a global Online Accounts repository in the Settings where you can register social networks such as Facebook and Google, but the Google support is buggy. It expires everytime, so don't use Evolution with it. Add the Imap/Smtp information manually instead. Email and Calendar data is properly synced that way.
You should have all your password in a LastPass account by now. Authy is a Chrome extension, so your multi-factor authentication should also just work.
My personal bank and investment companies, with their ugly Java applets, work just fine with Chromium and IcedTea, so I'm ok there too.
I just have to figure out the easiest backup strategy to have everything really secure. On the installation process, do not forget to choose the encrypted partition option - and if you do, definitelly backup your data regularly as I've heard of bugs during upgrades that made the encrypted partitions inaccessible. Be secure and also be careful.
As usual, from my macOS the only 2 things I will really miss is Apple Keynote (it's really amazing as no one was able to make a slick and fast presentation tool as good as Keynote) and iMovie for quick video editing (although Kdenlive is a very good alternative).
You even have built-in shortcuts to screen capture a window or an area and record a screencast!
Compared to my Ubuntu configuration, this Fedora 25 is really a pleasure to use. A competent macOS replacement. I highly recommend it!
And as I said at the update in the beginning of the post. Do check out Arch Linux and how to optimize your distro to be more responsiveness, particularly on old hardware.