When I sit down to write anything, I want to be using an Operating System that is stable, supports the tools I use, and maximizes the amount of time I spend being productive. This post is WIP.
I keep coming back to Fedora; the latest version is stable enough to rely on, with support for the latest packages. Previously I ran exclusively Debian after a long period of turmoil with Manjaro, Fedora, Ubuntu and many others. Debian is very reliable, but as I broaden my tinkering, it seemed more difficult than was warranted to keep all my tools up to date on Debian.
And so, I use Fedora. Here is how I configure my personal OS.
Important: I assume the reader is able to distinguish between commands that require SuperUser and commands that should be run without. Installing libraries or modules as a superuser in js, python and ruby will cause awful problems.
Table of Contents:
- Install Development Tools
- Configure Development Tools
- Download a Fedora Workstation disk image.
- Become superuser with
- Check how to address your usb with
- Unmount all USB partitions with
- Format the USB drive with
- Write the downloaded image to the USB with
- Install Fedora on your machine.
Before continuing, it is best to update everything and reboot so the new kernel is used. First, configure dnf by adding the following lines to
//etc/dnf/dnf.conf (you’ll need to be SuperUser):
Next, update the system with
dnf update --refresh.
In the future, the following commands can be used to update and install packages:
# To gain SuperUser priviliges: su # To update the system's packages: dnf update # To install any package: dnf install packagename # To leave SuperUser mode: exit
- Set up the terminal by installing the
terminus-fonts-consolepackages, setting Terminus as the custom font, disabling scrollbars, disabling the terminal bell, hiding the menu bar by default, and setting the color scheme to white on black. Add terminal to your GNOME favourites.
- Swap the CapsLock key for an additional Esc; it’s far easier to hit Esc when it’s right by your pinkie. Do this by installing
gnome-tweak-tooland checking make caps lock an additional esc in Keyboard and Mouse > Additional Layout Options. (I also set window focus to Sloppy at this point, and enable the window minimize button.)
- Set the hostname: as SuperUser:
hostnamectl set-hostname --static "newname"
# Many popular packages are found in the RPMFusion repos, # so it's a good idea to add them: dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
Install Development Tools
Install the major dependancies for most development:
dnf groupinstall "Development Tools"
Git with SSH keys makes version control a breeze. assuming all your projects are stored in GitHub repos, generating and storing an SSH key means you won’t need to type your password with every push, as you would with simple HTTP authentication. First, generate the key; it is safe to accept all the defaults.
ssh-keygen -t rsa -b 4096 -C "email@example.com"
Assuming you have an ssh agent installed (most distros do by default,) add the key to your ssh service:
Assuming Github is being used, the publickey located at
~/.ssh/id_rsa.pub can be saved as a new SSH key in you Github account settings. To complete git setup, it is also necessary to set git defaults:
git config --global user.name "First Last" git config --global user.email "firstname.lastname@example.org" git config --global core.editor vim
Repositories can now be cloned like so:
git clone email@example.com:UserName/RepoName.git
C and C++
Well, this is pretty easy on Unixlikes:
dnf install gcc gcc-c++
I typically program with Java 8, which is also a Scala dependancy:
dnf install java-1.8.0-openjdk-devel
To install nodejs and npm:
dnf install nodejs
To install Python 3 and pip:
dnf install python3-devel
For basic fiddling, install the basic scala repl:
dnf install scala
For larger projects, SBT is required:
curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo sudo mv bintray-sbt-rpm.repo /etc/yum.repos.d/ sudo dnf install sbt
Install ruby prerequisites:
dnf install git-core zlib zlib-devel gcc-c++ patch readline readline-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison curl sqlite-devel openssl-devel readline-devel zlib-devel
Install RBENV (not as SuperUser):
cd git clone https://github.com/rbenv/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc exec $SHELL git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc exec $SHELL rbenv install 2.4.2 gem install bundler
Configure Development Tools
Write your vim config,
syntax on colorscheme ron set tabstop=2 set shiftwidth=2 set softtabstop=0 set expandtab set smarttab set autoindent nnoremap <F4> :! clear && gcc % && clear && ./a.out<cr>
dnf install gnome-terminal-nautilus
dnf install fedora-workstation-repositories dnf config-manager --set-enabled google-chrome dnf install google-chrome-stable