Skip to content

๐Ÿ™ an Arch enabled PDE (Personalized Development Environment)

Notifications You must be signed in to change notification settings

cogikyo/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

โš™๏ธ dotfiles โš™๏ธ

dotfiles neonlights banner

๐Ÿ‘พ Overview


๐ŸŒŸ Additional guiding principles for software selection:

  • ๐Ÿงช Innovative (what's a better way of doing things?)
  • ๐Ÿ“– Open (growth oriented; infinite games)
  • ๐ŸŒ Collaborative (what can we do better?)

โŒ I try to avoid communities and software that:

  • ๐Ÿšฉ follow the status quo (even if it is easier at first)
  • ๐Ÿฅง have zero-sum mentality (winning is not the goal)

In short (JFK definitely would've used arch, btw):

"...we {do these} things not because they are easy, but because they are hard,"

โ€ƒโ€ƒ"because that goal will serve to organize and measure the best of our energies and skills,"

โ€ƒโ€ƒโ€ƒโ€ƒ"because that challenge is one that we are willing to accept, one we are unwilling to postpone..."


๐Ÿ‘จโ€๐Ÿ’ป Software

๐Ÿ–ฅ๏ธ Display
๐ŸŽฏ Core Applications

๐ŸŽฅ Appearance

๐ŸŽจ Design Framework
๐Ÿ’ฌ Fonts

๐ŸŽ Notable Applications

๐Ÿ› ๏ธ Installation

๐Ÿงฐ My Hardware

๐Ÿ”ฉ Literal Installation

1. Get the installation image:

2. Prepare an installation medium:

  • Find USB device partition (sda or sdb, probably):

    lsblk -f
    
  • Write to USB using dd (sd"x", do not use partition number):

    dd bs=4M if=path/to/archlinux-version-x86_64.iso of=/dev/sdx conv=fsync oflag=direct status=progress
    

3. Use guided arch installation

  • Boot to USB and run command (does a great job for me and is easy to follow):

    archinstall
    
  • Some relevant options that might not be clear:

    audio client: pipewire
    best effort partition: btrfs
    desktop client: minimal (arch does not support hyprland at this time)
    
  • Best to install a few essential packages during this step:

    base base-devel linux-headers git rustup
    

โš™๏ธ Post-Installation

General Recommendations ๏…ท worth the read, seriously

Note: the following is not meant to be a generalized installation guide; it's essentially a collection of commands to take a minimal arch install to my current configuration.

Many of steps are extremely tailored to my needs, or my best attempt to solve certain problems. Notably, many of my configs are based around my custom keyboard layout, so don't expect shortcuts to be intuitive if you are trying to copy them.

Eventually I'd like to create a generalized script to streamline installation for different hardware, but that's not a problem needing to be solved at this time.


1. Install the latest stable of version of rust using rustup:

rustup default nightly

2. Install paru:

cd ~
mkdir .cache && cd .cache
git clone https://aur.archlinux.org/paru.git
cd paru
makepkg -si

3. Clone dotfiles and install packages:

cd ~
git clone https://github.com/cogikyo/dotfiles
paru -S --needed - < ~/dotfiles/etc/packages.lst
# might want to review/edit this list โฎญ before installing.

# no good repos nordzy icons/cursors, do manually โฎฏ
git clone https://github.com/alvatip/Nordzy-icon
cd ~/.cache
cd Nordzy-icon
./install.sh
cd ~/.cache
git clone https://github.com/alvatip/Nordzy-cursors
cd Nordzy-cursors
./install.sh

# note: a location and openweathermap key is needed for weather widget.
# https://home.openweathermap.org/api_keys
echo "{api key here}" > ~/.local/.owm_api_key
echo "{lat} {long}" > ~/.local/.location

4. Change default sh:

chsh -s /usr/bin/zsh

5. Set up sddm:

cd ~/dotfiles/etc/sddm.conf.d
mkdir /etc/sddm.conf.d
sudo cp autologin.conf /etc/sddm.conf.d/
systemctl enable sddm

6. Symbolically link most config files:

mkdir ~/.config # might already be made
ln -sfn ~/dotfiles/config/* ~/.config/
ln -sfn ~/dotfiles/config/zsh/zshrc .zshrc

7. Setup some root configurations:

cd ~/dotfiles/etc
sudo ln -sfn ~/dotfiles/bin/* /usr/bin/
sudo cp bluetooth/main.conf /etc/bluetooth/main.conf
sudo cp udev/* /etc/udev/rules.d/ # probably don't want the bluetooth rules
sudo cp loader.conf /boot/loader/loader.conf
sudo cp gifview.desktop /usr/share/applications/gifview.desktop
sudo cp security/faillock.conf /etc/security/faillock.conf
sudo cp logid.cfg /etc/logid.cfg
sudo systemctl enable bluetooth

# DNS: systemd-resolved with Cloudflare (DNS-over-TLS)
sudo ln -sf ~/dotfiles/etc/systemd/resolved.conf /etc/systemd/
sudo systemctl enable --now systemd-resolved
sudo mkdir -p /etc/NetworkManager/conf.d
echo -e "[main]\ndns=systemd-resolved" | sudo tee /etc/NetworkManager/conf.d/dns.conf
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
sudo systemctl restart NetworkManager

8. Configure swap and memory management:

# Create btrfs swap subvolume with 16GB swapfile
sudo btrfs subvolume create /swap
sudo truncate -s 0 /swap/swapfile
sudo chattr +C /swap/swapfile        # disable COW (required for btrfs swap)
sudo fallocate -l 16G /swap/swapfile
sudo chmod 600 /swap/swapfile
sudo mkswap /swap/swapfile
sudo swapon /swap/swapfile

# Add to /etc/fstab (low priority so zram is used first)
echo '/swap/swapfile none swap defaults,pri=10 0 0' | sudo tee -a /etc/fstab

# Earlyoom: prevent the brutal kernel OOM killer from randomly killing processes when memory is exhausted.
sudo systemctl enable --now earlyoom

9. Configure hibernation (suspend-then-hibernate):

# Get swapfile resume offset (needed for btrfs swapfile hibernation)
RESUME_OFFSET=$(sudo btrfs inspect-internal map-swapfile -r /swap/swapfile)
RESUME_UUID=$(findmnt -no UUID -T /swap/swapfile)

echo "Add to bootloader options: resume=UUID=$RESUME_UUID resume_offset=$RESUME_OFFSET"

# Edit bootloader entry to add resume parameters
sudo nvim /boot/loader/entries/*_linux.conf
# Add to 'options' line: resume=UUID=<UUID> resume_offset=<OFFSET>

# Add resume hook to mkinitcpio (after filesystems, before fsck)
sudo nvim /etc/mkinitcpio.conf
# HOOKS=(... filesystems resume fsck)
sudo mkinitcpio -P

# Configure suspend-then-hibernate delay
sudo mkdir -p /etc/systemd/sleep.conf.d
sudo cp ~/dotfiles/etc/systemd/sleep.conf.d/hibernate.conf /etc/systemd/sleep.conf.d/

10. Install fonts:

# Extract bundled fonts (Albert Sans, Lora, Archivo, etc.)
mkdir -vp ~/.local/share
tar -xzvf ~/dotfiles/etc/fonts.tar.gz fonts
mv fonts ~/.local/share/

# Build custom Iosevka Vagari (monospace)
cd /tmp
git clone --depth 1 https://github.com/be5invis/Iosevka.git
cd Iosevka
cp ~/dotfiles/etc/iosevka/private-build-plans.toml .
npm install
npm run build -- ttf-unhinted::Vagari --jCmd=12
cp -r dist/Vagari/TTF/* ~/.local/share/fonts/
fc-cache -fv

TODO: Switch to curated fonts from Fontshare:

  • Satoshi (geometric sans for UI)
  • General Sans or Cabinet Grotesk (display)
  • Update fonts.tar.gz with new selections

11. Configure newtab server:

The custom newtab page (share/newtab/) requires updating the Firefox profile path:

# Find your Firefox profile directory
ls ~/.mozilla/firefox/ | grep -E '\.default|\.dev-edition'

# Update the profile path in main.go (replace YOUR_PROFILE with your actual profile name), e.g.:
sed -i "s/sdfm8kqz.dev-edition-default/YOUR_PROFILE/" ~/dotfiles/share/newtab/main.go

Then set Firefox to use the custom newtab:

  1. Open about:config
  2. Set browser.newtabpage.enabled = false
  3. Install an extension like New Tab Override
  4. Set custom URL to http://localhost:42069

Start the server (or add to startup):

cd ~/dotfiles/share/newtab && go run . &
# Or use the bin script: newtab-server

12. Update Firefox about:config options:

  • Increase scaling factor due to 4k screen (HiDPI environment):

    layout.css.devPixelsPerPx = 1.25
    
  • Stop asking to restore session (killing the windows counts as a crash, I guess)

    browser.sessionstore.resume_from_crash = false
    
  • Hide PDF sidebar by default

    pdfjs.sidebarViewOnLoad = 0
    
  • Disable some bloat:

    extensions.pocket.enabled = false
    
  • Review basic settings (fonts 'n such)

  • Install vagari.firefox userChrome css


13. Configure SSH key:

ssh-keygen -t ed25519 -C "your_email@example.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

# https://github.com/settings/keys
# view your key, which github needs for auth/singing
bat ~/.ssh/id_ed25519.pub
  • e.g., using SSH key to manage dotfiles:
# example moving to ssh origin:
git remote set-url origin git@github.com:cogikyo/dotfiles.git

My preferred directory structure: (definitely optional)

cd ~
mkdir -vp media/music media/images media/videos media/gifs media/screenshots media/recordings
mkdir -vp downloads docs/templates docs/books docs/papers docs/share
git clone git@github.com:cogikyo/vagari.git
git clone git@github.com:cogikyo/notes.git

About

๐Ÿ™ an Arch enabled PDE (Personalized Development Environment)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •