From d6cb5c683f5a439e08a591f02b29246e0f07791d Mon Sep 17 00:00:00 2001 From: pancakes
Date: Mon, 28 Jul 2025 20:55:35 +1000
Subject: [PATCH] Super overhaul
---
.gitignore | 11 +-
README.md | 20 +-
fish/dot-config/fish/config.fish | 12 +
fish/dot-config/fish/fish_plugins | 3 +
fish/dot-config/starship.toml | 22 +
foot/dot-config/foot/foot.ini | 35 -
helix/dot-config/helix/config.toml | 15 +
helix/dot-config/helix/languages.toml | 13 +
justfile | 182 +++--
kitty/dot-config/kitty/Tokyo Night.conf | 50 ++
kitty/dot-config/kitty/kitty.conf | 25 +
niri/dot-config/fuzzel/fuzzel.ini | 26 +
{wm => niri}/dot-config/niri/config.kdl | 414 ++++++----
niri/dot-config/swayidle/config | 4 +
niri/dot-config/swaylock/config | 7 +
niri/dot-config/waybar/config.jsonc | 103 +++
niri/dot-config/waybar/style.css | 130 +++
niri/dot-config/wpaperd/config.toml | 7 +
ranger/dot-config/ranger/rc.conf | 757 ------------------
ranger/dot-config/ranger/scope.sh | 356 --------
ssh/dot-ssh/config | 2 -
wm/dot-config/fuzzel/fuzzel.ini | 29 -
wm/dot-config/gtklock/config.ini | 6 -
wm/dot-config/mako/config | 14 -
wm/dot-config/swayidle/config | 3 -
wm/dot-config/waybar/config.jsonc | 93 ---
wm/dot-config/waybar/style.css | 97 ---
yazi/dot-config/yazi/keymap.toml | 49 ++
.../yazi/keymap.toml-1753599537122504 | 49 ++
yazi/dot-config/yazi/package.toml | 7 +
yazi/dot-config/yazi/theme.toml | 2 +
yazi/dot-config/yazi/yazi.toml | 3 +
zsh/dot-zimrc | 58 --
zsh/dot-zshenv | 1 -
zsh/dot-zshrc | 135 ----
35 files changed, 891 insertions(+), 1849 deletions(-)
create mode 100644 fish/dot-config/fish/config.fish
create mode 100644 fish/dot-config/fish/fish_plugins
create mode 100644 fish/dot-config/starship.toml
delete mode 100644 foot/dot-config/foot/foot.ini
create mode 100644 helix/dot-config/helix/config.toml
create mode 100644 helix/dot-config/helix/languages.toml
create mode 100644 kitty/dot-config/kitty/Tokyo Night.conf
create mode 100644 kitty/dot-config/kitty/kitty.conf
create mode 100644 niri/dot-config/fuzzel/fuzzel.ini
rename {wm => niri}/dot-config/niri/config.kdl (51%)
create mode 100644 niri/dot-config/swayidle/config
create mode 100644 niri/dot-config/swaylock/config
create mode 100644 niri/dot-config/waybar/config.jsonc
create mode 100644 niri/dot-config/waybar/style.css
create mode 100644 niri/dot-config/wpaperd/config.toml
delete mode 100644 ranger/dot-config/ranger/rc.conf
delete mode 100755 ranger/dot-config/ranger/scope.sh
delete mode 100644 ssh/dot-ssh/config
delete mode 100644 wm/dot-config/fuzzel/fuzzel.ini
delete mode 100644 wm/dot-config/gtklock/config.ini
delete mode 100644 wm/dot-config/mako/config
delete mode 100644 wm/dot-config/swayidle/config
delete mode 100644 wm/dot-config/waybar/config.jsonc
delete mode 100644 wm/dot-config/waybar/style.css
create mode 100644 yazi/dot-config/yazi/keymap.toml
create mode 100644 yazi/dot-config/yazi/keymap.toml-1753599537122504
create mode 100644 yazi/dot-config/yazi/package.toml
create mode 100644 yazi/dot-config/yazi/theme.toml
create mode 100644 yazi/dot-config/yazi/yazi.toml
delete mode 100644 zsh/dot-zimrc
delete mode 100644 zsh/dot-zshenv
delete mode 100644 zsh/dot-zshrc
diff --git a/.gitignore b/.gitignore
index 751553b..e7e69ae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,10 @@
-*.bak
+# fish shell
+fish/dot-config/fish/completions/
+fish/dot-config/fish/conf.d/
+fish/dot-config/fish/functions/
+fish/dot-config/fish/themes/
+fish/dot-config/fish/fish_variables
+
+# Yazi file manager
+yazi/dot-config/yazi/flavors/
+yazi/dot-config/yazi/plugins/
diff --git a/README.md b/README.md
index 2247ddc..74d980d 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,16 @@
-# pancakes' setup
+# pancakes' config
-This is the setup that I use for my personal Arch Linux setup. This includes my ~~window manager~~ (I'm using GNOME atm) and frequently used software.
+A repo containing my current desktop setup with stow modules and just recipes.
-General install steps:
+## Dependencies
-```sh
-git clone https://codeberg.org/pancakes/config.git
-cd config
-just
-```
+- Arch Linux (or derivative)
+- just
-Each folder in the root of this repository functions as a module with files inside being stowed (symlinked) relative to `~`. For example, when stowing *river*, `river/.config/river/` is symlinked to `~/.config/river`, `river/.config/xdg-desktop-portal/river-portals.conf` to `~/.config/xdg-desktop-portal/river-portals.conf`, and `river/.config/xdg-desktop-portal-wlr/` to `~/.config/xdg-desktop-portal-wlr`.
+## Usage
+**WARNING:** All just recipes in this repository are destructive. Make sure you know what they do before using them.
+
+Clone the repository and run `just` in the repo directory for a list of recipes.
+
+You can use `just full-auto` or `just full-auto-gui` for fully automated setups. You can pick and choose recipes manually but you should `just packages` first to make sure Flatpak, Chaotic AUR, and paru are setup correctly.
diff --git a/fish/dot-config/fish/config.fish b/fish/dot-config/fish/config.fish
new file mode 100644
index 0000000..873b398
--- /dev/null
+++ b/fish/dot-config/fish/config.fish
@@ -0,0 +1,12 @@
+set -U fish_greeting
+
+if status is-interactive
+ # Commands to run in interactive sessions can go here
+
+ # Aliases
+ alias cat="bat"
+ alias ls="eza --group-directories-first -x"
+
+ # Load prompt (KEEP THIS AT THE END)
+ starship init fish | source
+end
diff --git a/fish/dot-config/fish/fish_plugins b/fish/dot-config/fish/fish_plugins
new file mode 100644
index 0000000..25e9cc5
--- /dev/null
+++ b/fish/dot-config/fish/fish_plugins
@@ -0,0 +1,3 @@
+franciscolourenco/done
+laughedelic/pisces
+gazorby/fish-abbreviation-tips
diff --git a/fish/dot-config/starship.toml b/fish/dot-config/starship.toml
new file mode 100644
index 0000000..85bfb36
--- /dev/null
+++ b/fish/dot-config/starship.toml
@@ -0,0 +1,22 @@
+# Get editor completions based on the config schema
+"$schema" = 'https://starship.rs/config-schema.json'
+
+format = "$directory$git_branch$git_status$character"
+right_format = "$cmd_duration$status"
+add_newline = true
+
+[character]
+success_symbol = "[❯](bold purple)"
+
+[cmd_duration]
+format = " [$duration]($style)"
+
+[git_branch]
+format = "[$branch(:$remote_branch)]($style) "
+
+[git_status]
+format = "([$all_status$ahead_behind]($style) )"
+
+[status]
+format = " [$status]($style)"
+disabled = false
diff --git a/foot/dot-config/foot/foot.ini b/foot/dot-config/foot/foot.ini
deleted file mode 100644
index d70f789..0000000
--- a/foot/dot-config/foot/foot.ini
+++ /dev/null
@@ -1,35 +0,0 @@
-[main]
-font=FiraCode Nerd Font:size=13
-box-drawings-uses-font-glyphs=yes
-
-[environment]
-RANGER_LOAD_DEFAULT_RC="FALSE"
-
-[bell]
-urgent=yes
-notify=yes
-visual=yes
-
-[mouse]
-hide-when-typing=yes
-
-[colors]
-foreground=a9b1d6
-background=1a1b26
-regular0=32344a
-regular1=f7768e
-regular2=9ece6a
-regular3=e0af68
-regular4=7aa2f7
-regular5=ad8ee6
-regular6=449dab
-regular7=787c99
-bright0=444b6a
-bright1=ff7a93
-bright2=b9f27c
-bright3=ff9e64
-bright4=7da6ff
-bright5=bb9af7
-bright6=0db9d7
-bright7=acb0d0
-alpha=0.9
\ No newline at end of file
diff --git a/helix/dot-config/helix/config.toml b/helix/dot-config/helix/config.toml
new file mode 100644
index 0000000..f7c0b31
--- /dev/null
+++ b/helix/dot-config/helix/config.toml
@@ -0,0 +1,15 @@
+theme = "tokyonight"
+
+[editor]
+cursorline = true
+popup-border = "all"
+
+[editor.cursor-shape]
+insert = "bar"
+
+[editor.indent-guides]
+render = true
+
+[editor.lsp]
+display-inlay-hints = true
+
diff --git a/helix/dot-config/helix/languages.toml b/helix/dot-config/helix/languages.toml
new file mode 100644
index 0000000..7342e67
--- /dev/null
+++ b/helix/dot-config/helix/languages.toml
@@ -0,0 +1,13 @@
+[[language]]
+name = "bash"
+auto-format = true
+
+[[language]]
+name = "xml"
+file-types = [ "xml", "svg", "xsd", "xslt", "xsl", "ui" ]
+auto-format = true
+formatter = { command = "xmllint", args = ["--format", "-"] }
+language-servers = [ "xml" ]
+
+[language-server.xml]
+command = "lemminx"
diff --git a/justfile b/justfile
index d807cf6..fa9f76e 100644
--- a/justfile
+++ b/justfile
@@ -1,108 +1,116 @@
-username := env_var('USER')
-
-# Displays this message
+[private]
default:
- @just --list --justfile {{justfile()}}
+ @just --list
-# Arch Linux package mirrors & timer for fetching best mirrors
-arch-mirrors:
- sudo reflector --country 'Australia,New Zealand,' --latest 15 --protocol https --sort rate --save /etc/pacman.d/mirrorlist
- sudo systemctl enable --now reflector.timer
+_echoerror text:
+ @echo -e "{{ style("error") }}{{ text }}{{ NORMAL }}"
-# Arch User Repository
-aur:
- rustup install stable
- rm -rf /tmp/paru-git
- git clone https://aur.archlinux.org/paru-git.git /tmp/paru-git
- cd /tmp/paru-git; makepkg -si
- rm -rf /tmp/paru-git
+_echowarning text:
+ @echo -e "{{ style("warning") }}{{ text }}{{ NORMAL }}"
-# Essential CLI tools & utils
-cli:
- sudo pacman -S base-devel btop curl eza fastfetch ffmpeg fwupd fzf man-db man-pages nvtop openssh reflector ripgrep unrar vim vulkan-tools xdg-user-dirs yt-dlp
+full-auto: packages dev-setup fish-shell helix-editor yazi-file-manager
-# ranger terminal file browser
-cli-ranger:
- sudo pacman -S atool ffmpegthumbnailer highlight mediainfo p7zip transmission-cli unzip w3m zip
- paru -S ranger-git
- pipx install no_vtf python-bidi
+full-auto-gui: full-auto kitty-terminal niri-window-manager
- stow --dotfiles -S ranger
+# (Run first unless running full-auto) Setup Flatpak, pacman mirrors, Chaotic AUR, and paru AUR helper
+packages:
+ @just _echowarning "1) Installing Flatpak and adding Flathub repository"
+ sudo pacman -S flatpak flatpak-xdg-utils
+ flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
-codecs:
- sudo pacman -S gst-libav gst-plugin-va gst-plugins-bad gst-plugins-base gst-plugins-good gstreamer
+ @just _echowarning "\n2) Installing reflector (automatic mirror configuration)"
+ sudo pacman -S reflector
-# C#/.NET dev environment & Rider editor
-dev-csharp:
- sudo pacman -S aspnet-runtime aspnet-targeting-pack dotnet-sdk dotnet-runtime dotnet-targeting-pack
- sudo dotnet workload install wasm-tools
- paru -S rider
+ @just _echoerror "\n\n----- IMPORTANT -----\nPlease modify /etc/xdg/reflector/reflector.conf before continuing\n---------------------"
+ @read -p "Press enter to continue"
-# Node dev environment
-dev-node:
- sudo pacman -S nodejs npm
+ sudo systemctl enable --now reflector.timer
-# Python dev environment & PyCharm editor
-dev-python:
- sudo pacman -S pycharm-community-edition python python-pip python-pipx python-venv
-
- fish -c "fish_add_path $HOME/.local/bin"
+ @just _echowarning "\n3) Adding Chaotic AUR repository to pacman"
+ sudo pacman-key --recv-key 3056513887B78AEB --keyserver keyserver.ubuntu.com
+ sudo pacman-key --lsign-key 3056513887B78AEB
-# Rust dev environment
-dev-rust:
- sudo pacman -S rustup
- rustup install stable
+ sudo pacman -U 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst'
+ sudo pacman -U 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst'
-# Docker container runtime
-docker:
- sudo pacman -S docker docker-compose
- sudo systemctl enable --now docker
+ @just _echoerror "\n\n----- IMPORTANT -----\nPlease add the following 2 lines to the end of /etc/pacman.conf before continuing\n\n[chaotic-aur]\nInclude = /etc/pacman.d/chaotic-mirrorlist\n---------------------"
+ @read -p "Press enter to continue"
-# Flatpak & Flathub package repository
-flatpak:
- sudo pacman -S flatpak flatpak-xdg-utils
- flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
+ @just _echowarning "\n4) Installing paru AUR helper"
+ sudo pacman -Sy paru
-# Steam, Heroic, Prism Launcher, Gamescope, MangoHud & other utils
-games:
- sudo pacman -S goverlay mangohud steam ttf-liberation wine wine-gecko wine-mono winetricks wqy-zenhei
- paru -S protontricks
- flatpak install ca.parallel_launcher.ParallelLauncher com.heroicgameslauncher.hgl net.davidotek.pupgui2 org.prismlauncher.PrismLauncher
+# Programming languages, runtimes, toolchains, and git
+[group("essentials")]
+dev-setup:
+ @just _echowarning "1) Installing languages, runtimes, and toolchains"
+ paru -S aspnet-runtime aspnet-targeting-pack dotnet-sdk nodejs npm python3 rustup zig
-# git global config
-git:
- git config --global commit.gpgsign true
- git config --global init.defaultBranch "main"
- git config --global user.name "pancakes"
+ @just _echowarning "\n2) Installing Rust language"
+ rustup toolchain add stable-x86_64-unknown-linux-gnu
-# Syncthing file sync
-syncthing:
- sudo pacman -S syncthing
- systemctl enable --now --user syncthing
+ @just _echowarning "\n3) Setting git global config"
+ git config --global init.defaultBranch "main"
-# Tailscale private VPN
-tailscale:
- sudo pacman -S tailscale
- sudo systemctl enable --now tailscaled
- sudo tailscale up --operator={{username}} --ssh=true
+# fish shell and plugins
+[group("essentials")]
+fish-shell:
+ @just _echowarning "1) Installing fish, fish plugin manager, and Starship prompt"
+ paru -S fisher fish starship
-# window manager and required programs
-wm:
- sudo pacman -S bluez bluez-utils cliphist easyeffects firefox fuzzel gdm gnome-keyring gtklock hunspell hunspell-en_au hunspell-en_us mako niri noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra power-profiles-daemon swayidle swww ttf-firacode-nerd ttf-font-awesome waybar wl-clipboard xdg-desktop-portal-gnome
- paru -S xwayland-satellite
- flatpak install it.mijorus.smile
+ @just _echowarning "\n2) Stowing fish config"
+ stow --dotfiles -S fish
- sudo systemctl enable --now bluetooth
- sudo systemctl enable gdm
- sudo systemctl enable --now power-profiles-daemon
+ @just _echowarning "\n3) Setting user shell"
+ chsh -s /usr/bin/fish
- stow --dotfiles -S wm
+ @just _echowarning "\n4) Installing fish plugins"
+ fish -c "fisher update"
+
+[group("essentials")]
+helix-editor:
+ @just _echowarning "1) Installing Helix and dependencies"
+ paru -S bash-language-server clang fish-lsp helix just-lsp lemminx marksman python-lsp-server shfmt taplo-cli typescript-language-server vscode-css-languageserver vscode-html-languageserver vscode-json-languageserver yaml-language-server zls
+
+ @just _echowarning "\n2) Stowing Helix config"
+ stow --dotfiles -S helix
+
+[group("graphical")]
+kitty-terminal:
+ @just _echowarning "1) Installing Kitty and dependencies"
+ paru -S imagemagick kitty python-pygments ttf-firacode-nerd
+
+ @just _echowarning "\n2) Stowing Kitty config"
+ stow --dotfiles -S kitty
+
+# Install niri and tools used with it
+[group("graphical")]
+niri-window-manager:
+ @just _echowarning "1) Installing niri and related tools"
+ paru -S cliphist fuzzel gdm gnome-keyring niri-git noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra polkit-kde-agent swayidle swaylock swaync ttf-firacode-nerd ttf-font-awesome waybar wl-clipboard wlsunset wpaperd xdg-desktop-portal-gnome xwayland-satellite-git
+
+ @just _echowarning "\n2) Stowing niri config"
+ stow --dotfiles -S niri
+
+ @just _echowarning "\n3) Enabling GNOME display manager service"
+ sudo systemctl enable gdm
+
+[group("other")]
+syncthing-file-sync:
+ @just _echowarning "1) Installing Syncthing"
+ paru -S syncthing
+
+ @just _echowarning "\n2) Enabling and starting Syncthing user service"
+ systemctl enable --now --user syncthing
+
+# Yazi terminal file manager and plugins
+[group("essentials")]
+yazi-file-manager:
+ @just _echowarning "1) Installing Yazi and dependencies"
+ paru -S 7zip fd ffmpeg fzf imagemagick jq poppler resvg ripgrep wl-clipboard yazi zoxide
+
+ @just _echowarning "\n2) Stowing Yazi config"
+ stow --dotfiles -S yazi
+
+ @just _echowarning "\n3) Installing Yazi plugins"
+ ya pkg install
-zsh:
- sudo pacman -S zsh
- chsh -s /usr/bin/zsh
- curl -fsSL https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh
- mv ~/.zimrc ~/.zimrc.old
- mv ~/.zshenv ~/.zshenv.old
- mv ~/.zshrc ~/.zshrc.old
- stow --dotfiles -S zsh
diff --git a/kitty/dot-config/kitty/Tokyo Night.conf b/kitty/dot-config/kitty/Tokyo Night.conf
new file mode 100644
index 0000000..f2d9728
--- /dev/null
+++ b/kitty/dot-config/kitty/Tokyo Night.conf
@@ -0,0 +1,50 @@
+# vim:ft=kitty
+
+## name: Tokyo Night
+## license: MIT
+## author: Folke Lemaitre
+## upstream: https://github.com/folke/tokyonight.nvim/raw/main/extras/kitty/tokyonight_night.conf
+
+
+background #1a1b26
+foreground #c0caf5
+selection_background #283457
+selection_foreground #c0caf5
+url_color #73daca
+cursor #c0caf5
+cursor_text_color #1a1b26
+
+# Tabs
+active_tab_background #7aa2f7
+active_tab_foreground #16161e
+inactive_tab_background #292e42
+inactive_tab_foreground #545c7e
+#tab_bar_background #15161e
+
+# Windows
+active_border_color #7aa2f7
+inactive_border_color #292e42
+
+# normal
+color0 #15161e
+color1 #f7768e
+color2 #9ece6a
+color3 #e0af68
+color4 #7aa2f7
+color5 #bb9af7
+color6 #7dcfff
+color7 #a9b1d6
+
+# bright
+color8 #414868
+color9 #f7768e
+color10 #9ece6a
+color11 #e0af68
+color12 #7aa2f7
+color13 #bb9af7
+color14 #7dcfff
+color15 #c0caf5
+
+# extended colors
+color16 #ff9e64
+color17 #db4b4b
diff --git a/kitty/dot-config/kitty/kitty.conf b/kitty/dot-config/kitty/kitty.conf
new file mode 100644
index 0000000..870531a
--- /dev/null
+++ b/kitty/dot-config/kitty/kitty.conf
@@ -0,0 +1,25 @@
+# Theme
+include Tokyo Night.conf
+
+# Fonts
+font_family FiraCode Nerd Font
+font_size 12.0
+
+# Bell
+enable_audio_bell no
+window_alert_on_bell yes
+
+# Window
+enabled_layouts tall:bias=50;full_size=1;mirrored=false
+draw_minimal_borders no
+wayland_titlebar_color background
+
+# Keymaps
+map alt+shift+enter launch --cwd=current
+map alt+q close_window
+map alt+n layout_action bias 50 62 70
+
+map alt+h neighboring_window left
+map alt+j neighboring_window down
+map alt+k neighboring_window up
+map alt+l neighboring_window right
diff --git a/niri/dot-config/fuzzel/fuzzel.ini b/niri/dot-config/fuzzel/fuzzel.ini
new file mode 100644
index 0000000..3821fc0
--- /dev/null
+++ b/niri/dot-config/fuzzel/fuzzel.ini
@@ -0,0 +1,26 @@
+font=Inter
+use-bold=yes
+placeholder=run
+prompt="❯ "
+anchor=top
+y-margin=20
+lines=10
+tabs=4
+horizontal-pad=8
+vertical-pad=8
+inner-pad=8
+
+[colors]
+background=1a1b26e5
+text=c0caf5ff
+prompt=bb9af7ff
+placeholder=c4a7e770
+input=c0caf5ff
+selection=bb9af7ff
+selection-text=15161e70
+selection-match=232136ff
+border=bb9af7ff
+
+[border]
+width=2
+radius=5
diff --git a/wm/dot-config/niri/config.kdl b/niri/dot-config/niri/config.kdl
similarity index 51%
rename from wm/dot-config/niri/config.kdl
rename to niri/dot-config/niri/config.kdl
index 0a2617d..021d585 100644
--- a/wm/dot-config/niri/config.kdl
+++ b/niri/dot-config/niri/config.kdl
@@ -1,27 +1,13 @@
-// This config is in the KDL format: https://kdl.dev
-// "/-" comments out the following node.
-// Check the wiki for a full description of the configuration:
-// https://github.com/YaLTeR/niri/wiki/Configuration:-Overview
+debug {
+ disable-cursor-plane
+}
-// Input device configuration.
-// Find the full list of options on the wiki:
-// https://github.com/YaLTeR/niri/wiki/Configuration:-Input
input {
- keyboard {
- xkb {
- // You can set rules, model, layout, variant and options.
- // For more information, see xkeyboard-config(7).
-
- // For example:
- // layout "us,ru"
- // options "grp:win_space_toggle,compose:ralt,ctrl:nocaps"
- }
- }
-
touchpad {
tap
// dwt
// dwtp
+ drag-lock
natural-scroll
scroll-method "two-finger"
disabled-on-external-mouse
@@ -30,100 +16,104 @@ input {
mouse {
accel-profile "flat"
}
-
- // warp-mouse-to-focus
}
// You can configure outputs by their name, which you can find
// by running `niri msg outputs` while inside a niri instance.
-// Remember to uncomment the node by removing "/-"!
+
output "eDP-1" {
scale 1.5
+ transform "normal"
+ // position x=1280 y=0
}
output "LG Electronics LG ULTRAGEAR 404NTCZ0R931" {
scale 1.5
- // variable-refresh-rate
+ variable-refresh-rate on-demand=true
}
-// Settings that influence how windows are positioned and sized.
-// Find more information on the wiki:
-// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
layout {
- // Set gaps around windows in logical pixels.
gaps 10
- // When to center a column when changing focus, options are:
- // - "never", default behavior, focusing an off-screen column will keep at the left
- // or right edge of the screen.
- // - "always", the focused column will always be centered.
- // - "on-overflow", focusing a column will center it if it doesn't fit
- // together with the previously focused column.
center-focused-column "on-overflow"
+ always-center-single-column
- // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
preset-column-widths {
- // Proportion sets the width as a fraction of the output width, taking gaps into account.
- // For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
- // The default preset widths are 1/3, 1/2 and 2/3 of the output.
- proportion 0.33333
- proportion 0.5
- proportion 0.66667
-
- // Fixed sets the width in logical pixels exactly.
- // fixed 1920
- }
-
- // You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
- preset-window-heights {
proportion 0.33333
proportion 0.5
proportion 0.66667
}
- // You can change the default width of the new windows.
- // default-column-width { proportion 0.5; }
- // If you leave the brackets empty, the windows themselves will decide their initial width.
- default-column-width {}
+ default-column-width { proportion 0.5; }
focus-ring {
- off
+ off
}
border {
width 2
active-color "#bb9af7"
- inactive-color "#565f89"
+ inactive-color "#414868"
+ }
+
+ shadow {
+ on
+ softness 30
+ spread 5
+ offset x=0 y=5
+ color "#0007"
+ }
+
+ tab-indicator {
+ place-within-column
+ gap 4
+ width 4
+ gaps-between-tabs 4
+ corner-radius 5
+ }
+
+ background-color "transparent"
+}
+
+hotkey-overlay {
+ skip-at-startup
+}
+
+overview {
+ workspace-shadow {
+ off
}
}
-environment {
- DISPLAY ":10"
- MOZ_ENABLE_WAYLAND "1"
- MOZ_USE_XINPUT2 "1"
-}
-
-// Add lines like this to spawn processes at startup.
-// Note that running niri as a session supports xdg-desktop-autostart
-
-// Services
-spawn-at-startup "mako"
-spawn-at-startup "xwayland-satellite" ":10"
+// Utilities
+spawn-at-startup "/usr/lib/polkit-kde-authentication-agent-1"
spawn-at-startup "swayidle" "-w"
+spawn-at-startup "wlsunset" "-l" "-27.4" "-L" "153"
+spawn-at-startup "wpaperd" "-d"
+spawn-at-startup "swaync"
spawn-at-startup "waybar"
-spawn-at-startup "swww-daemon"
+spawn-at-startup "udiskie"
spawn-at-startup "wl-paste" "--watch" "cliphist" "store"
+spawn-at-startup "cliphist" "wipe"
spawn-at-startup "flatpak" "run" "it.mijorus.smile" "--start-hidden"
-// Applications
-spawn-at-startup "firefox"
-spawn-at-startup "easyeffects"
-spawn-at-startup "vesktop"
-spawn-at-startup "foot" "-e" "btop"
+environment {
+ CLIPHIST_MAX_ITEMS "20"
+ ELECTRON_OZONE_PLATFORM_HINT "auto"
+ PROTON_ENABLE_WAYLAND "1"
+ TERMINAL "kitty"
+}
+
+cursor {
+ xcursor-theme "Adwaita"
+ xcursor-size 24
+}
+
+workspace "web"
+workspace "chat"
+workspace "dev"
+workspace "games"
-// Uncomment this line to ask the clients to omit their client-side decorations if possible.
-// If the client will specifically ask for CSD, the request will be honored.
-// Additionally, clients will be informed that they are tiled, removing some rounded corners.
prefer-no-csd
// You can change the path where screenshots are saved.
@@ -131,84 +121,132 @@ prefer-no-csd
// The path is formatted with strftime(3) to give you the screenshot date and time.
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
-// You can also set this to null to disable saving screenshots to disk.
-// screenshot-path null
-
-// Animation settings.
-// The wiki explains how to configure individual animations:
-// https://github.com/YaLTeR/niri/wiki/Configuration:-Animations
-animations {
- // Uncomment to turn off all animations.
- // off
-
- // Slow down all animations by this factor. Values below 1 speed them up instead.
- // slowdown 3.0
-}
-
-workspace "web"
-workspace "chat"
-
// Window rules let you adjust behavior for individual windows.
// Find more information on the wiki:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules
-// Round corners
+// Make windows open floating
+window-rule {
+ match app-id=r#"^it\.mijorus\.smile$"#
+
+ open-floating true
+}
+
+// Open the Firefox picture-in-picture player as floating by default.
+window-rule {
+ match app-id=r#"firefox"# title="^Picture-in-Picture$"
+
+ open-floating true
+}
+
+// Block out windows from screen capture
+window-rule {
+ match app-id=r#"discord"#
+
+ block-out-from "screencast"
+}
+
+// Display Steam notifications in corner of the screen
+window-rule {
+ match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"#
+
+ default-floating-position x=0 y=0 relative-to="bottom-right"
+}
+
+// Open windows in web workspace
+window-rule {
+ match app-id=r#"firefox$"# at-startup=true
+ match app-id=r#"thunderbird$"#
+
+ open-on-workspace "web"
+}
+
+// Open windows in chat workspace
+window-rule {
+ match app-id="discord"
+
+ open-on-workspace "chat"
+}
+
+// Open windows in games workspace
+window-rule {
+ match app-id="gamescope"
+ match app-id=r#"PrismLauncher$"#
+ match app-id="steam"
+
+ open-on-workspace "games"
+}
+
+// Dont auto focus
+window-rule {
+ match app-id="steam"
+
+ open-focused false
+}
+
+// Maximize at startup
+window-rule {
+ match app-id=r#"firefox$"# at-startup=true
+ match app-id="discord" at-startup=true
+ match app-id="steam" at-startup=true
+
+ open-maximized true
+}
+
+// Enable rounded corners for all windows.
window-rule {
geometry-corner-radius 5
clip-to-geometry true
}
-// Firefox
+// Indicate screencasted windows with red colors.
window-rule {
- match app-id="firefox"
+ match is-window-cast-target=true
- open-on-workspace "web"
+ border {
+ active-color "#ff0000"
+ inactive-color "#aa0000"
+ }
+
+ shadow {
+ color "#aa0000"
+ }
+
+ tab-indicator {
+ active-color "#ff0000"
+ inactive-color "#aa0000"
+ }
}
-// Chat applications
-window-rule {
- match app-id="vesktop"
+// Enable shadows on launcher and notifications
+layer-rule {
+ match namespace="^launcher$"
- block-out-from "screencast"
- open-maximized true
- open-on-workspace "chat"
+ shadow {
+ on
+ }
+
+ geometry-corner-radius 5
}
-window-rule {
- match app-id="com.github.wwmm.easyeffects"
+layer-rule {
+ match namespace=r#"^wpaperd-"#
- open-on-workspace "chat"
+ place-within-backdrop true
}
-// Steam
-window-rule {
- match app-id="steam" title="Steam"
-
- open-maximized true
-}
-
-window-rule {
- match app-id="gamescope"
-
- open-fullscreen true
-}
-
-// foot
-window-rule {
- match app-id="foot"
-
- default-column-width { proportion 0.5; }
-}
-
-// Hide private stuff :3
-window-rule {
- match app-id="firefox" title=r#"^Extension: \(Bitwarden Password Manager\)"#
- match app-id="org.gnome.Nautilus"
+// Block out mako notifications from screencasts.
+layer-rule {
+ match namespace="swaync-notification-window"
block-out-from "screencast"
}
binds {
+ // Keys consist of modifiers separated by + signs, followed by an XKB key name
+ // in the end. To find an XKB name for a particular key, you may use a program
+ // like wev.
+ //
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
// when running as a winit window.
@@ -216,23 +254,35 @@ binds {
// shows a list of important hotkeys.
Mod+Shift+Slash { show-hotkey-overlay; }
- Mod+Return { spawn "foot"; }
- Mod+D { spawn "fuzzel"; }
- Mod+E { spawn "foot" "-e" "ranger"; }
- Mod+Alt+L { spawn "gtklock" "-d"; }
- Mod+V { spawn "sh" "-c" "cliphist list | fuzzel -d -p '> ' --placeholder=clipboard | cliphist decode | wl-copy"; }
- Mod+slash { spawn "flatpak" "run" "it.mijorus.smile"; }
+ // Suggested binds for running programs: terminal, app launcher, screen locker.
+ Mod+Return { spawn "kitty"; }
+ Mod+D { spawn "fuzzel"; }
+ Mod+V hotkey-overlay-title="Manage clipboard" { spawn "sh" "-c" "cliphist list | fuzzel --dmenu --placeholder clipboard --with-nth 2 | cliphist decode | wl-copy"; }
+ Super+Alt+L { spawn "swaylock"; }
+ Mod+E { spawn "kitty" "-e" "yazi"; }
+ Mod+Shift+E { spawn "nautilus"; }
+ Mod+Shift+D { spawn "emacsclient" "--alternate-editor=" "--create-frame"; }
+ Mod+Period { spawn "flatpak" "run" "it.mijorus.smile"; }
+ Control+Shift+Escape { spawn "kitty" "-e" "btop"; }
+ // You can also use a shell. Do this if you need pipes, multiple commands, etc.
+ // Note: the entire command goes as a single argument in the end.
+ // Mod+T { spawn "bash" "-c" "notify-send hello && exec alacritty"; }
+
+ // Volume keys mappings for PipeWire & WirePlumber.
XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; }
XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; }
XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
+ Alt+F4 { close-window; }
Mod+Shift+Q { close-window; }
+ Mod+O { toggle-overview; }
+
Mod+H { focus-column-left; }
- Mod+J { focus-window-down; }
- Mod+K { focus-window-up; }
+ Mod+J { focus-window-down-or-top; }
+ Mod+K { focus-window-up-or-bottom; }
Mod+L { focus-column-right; }
Mod+Shift+H { move-column-left; }
@@ -240,16 +290,19 @@ binds {
Mod+Shift+K { move-window-up; }
Mod+Shift+L { move-column-right; }
- Mod+Home { focus-column-first; }
- Mod+End { focus-column-last; }
+ Mod+Home { focus-column-first; }
+ Mod+End { focus-column-last; }
Mod+Shift+Home { move-column-to-first; }
Mod+Shift+End { move-column-to-last; }
- Mod+Page_Down { focus-workspace-down; }
+ Mod+Page_Down { focus-workspace-down; }
Mod+Page_Up { focus-workspace-up; }
Mod+U { focus-workspace-down; }
Mod+I { focus-workspace-up; }
-
+ Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
+ Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
+ Mod+Ctrl+U { move-column-to-workspace-down; }
+ Mod+Ctrl+I { move-column-to-workspace-up; }
Mod+Shift+Page_Down { move-workspace-down; }
Mod+Shift+Page_Up { move-workspace-up; }
@@ -269,15 +322,11 @@ binds {
Mod+WheelScrollRight { focus-column-right; }
Mod+WheelScrollLeft { focus-column-left; }
- Mod+Ctrl+WheelScrollRight { move-column-right; }
- Mod+Ctrl+WheelScrollLeft { move-column-left; }
// Usually scrolling up and down with Shift in applications results in
// horizontal scrolling; these binds replicate that.
Mod+Shift+WheelScrollDown { focus-column-right; }
Mod+Shift+WheelScrollUp { focus-column-left; }
- Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
- Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
// Similarly, you can bind touchpad scroll "ticks".
// Touchpad scrolling is continuous, so for these binds it is split into
@@ -305,23 +354,32 @@ binds {
Mod+7 { focus-workspace 7; }
Mod+8 { focus-workspace 8; }
Mod+9 { focus-workspace 9; }
- Mod+Shift+1 { move-window-to-workspace 1; }
- Mod+Shift+2 { move-window-to-workspace 2; }
- Mod+Shift+3 { move-window-to-workspace 3; }
- Mod+Shift+4 { move-window-to-workspace 4; }
- Mod+Shift+5 { move-window-to-workspace 5; }
- Mod+Shift+6 { move-window-to-workspace 6; }
- Mod+Shift+7 { move-window-to-workspace 7; }
- Mod+Shift+8 { move-window-to-workspace 8; }
- Mod+Shift+9 { move-window-to-workspace 9; }
+ Mod+Shift+1 { move-column-to-workspace 1; }
+ Mod+Shift+2 { move-column-to-workspace 2; }
+ Mod+Shift+3 { move-column-to-workspace 3; }
+ Mod+Shift+4 { move-column-to-workspace 4; }
+ Mod+Shift+5 { move-column-to-workspace 5; }
+ Mod+Shift+6 { move-column-to-workspace 6; }
+ Mod+Shift+7 { move-column-to-workspace 7; }
+ Mod+Shift+8 { move-column-to-workspace 8; }
+ Mod+Shift+9 { move-column-to-workspace 9; }
+
+ Mod+Ctrl+1 { move-window-to-workspace 1; }
+ Mod+Ctrl+2 { move-window-to-workspace 2; }
+ Mod+Ctrl+3 { move-window-to-workspace 3; }
+ Mod+Ctrl+4 { move-window-to-workspace 4; }
+ Mod+Ctrl+5 { move-window-to-workspace 5; }
+ Mod+Ctrl+6 { move-window-to-workspace 6; }
+ Mod+Ctrl+7 { move-window-to-workspace 7; }
+ Mod+Ctrl+8 { move-window-to-workspace 8; }
+ Mod+Ctrl+9 { move-window-to-workspace 9; }
// Switches focus between the current and the previous workspace.
- // Mod+Tab { focus-workspace-previous; }
+ Mod+Tab { focus-workspace-previous; }
- Mod+Comma { consume-window-into-column; }
- Mod+Period { expel-window-from-column; }
-
- // There are also commands that consume or expel a single window to the side.
+ // The following binds move the focused window in and out of a column.
+ // If the window is alone, they will consume it into the nearby column to the side.
+ // If the window is already in a column, they will expel it out.
Mod+BracketLeft { consume-or-expel-window-left; }
Mod+BracketRight { consume-or-expel-window-right; }
@@ -330,6 +388,11 @@ binds {
Mod+Ctrl+R { reset-window-height; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
+
+ // Expand the focused column to space not taken up by other fully visible columns.
+ // Makes the column "fill the rest of the space".
+ Mod+Ctrl+F { expand-column-to-available-width; }
+
Mod+C { center-column; }
// Finer width adjustments.
@@ -347,6 +410,15 @@ binds {
Mod+Shift+Minus { set-window-height "-10%"; }
Mod+Shift+Equal { set-window-height "+10%"; }
+ // Move the focused window between the floating and the tiling layout.
+ Mod+B { toggle-window-floating; }
+ Mod+Shift+B { switch-focus-between-floating-and-tiling; }
+
+ // Toggle tabbed column display mode.
+ // Windows in this column will appear as vertical tabs,
+ // rather than stacked on top of each other.
+ Mod+W { toggle-column-tabbed-display; }
+
// Actions to switch layouts.
// Note: if you uncomment these, make sure you do NOT have
// a matching layout switch hotkey configured in xkb options above.
@@ -355,19 +427,29 @@ binds {
// Mod+Space { switch-layout "next"; }
// Mod+Shift+Space { switch-layout "prev"; }
- Print { screenshot; }
- Ctrl+Print { screenshot-screen; }
- Alt+Print { screenshot-window; }
+ Print { screenshot; }
+ Shift+Print { screenshot-screen; }
+ Alt+Print { screenshot-window; }
+
+ Mod+Alt+Return { set-dynamic-cast-window; }
+ Mod+Alt+Shift+Return { set-dynamic-cast-monitor; }
+ Mod+Alt+Shift+Backspace { clear-dynamic-cast-target; }
+
+ // Applications such as remote-desktop clients and software KVM switches may
+ // request that niri stops processing the keyboard shortcuts defined here
+ // so they may, for example, forward the key presses as-is to a remote machine.
+ // It's a good idea to bind an escape hatch to toggle the inhibitor,
+ // so a buggy application can't hold your session hostage.
+ //
+ // The allow-inhibiting=false property can be applied to other binds as well,
+ // which ensures niri always processes them, even when an inhibitor is active.
+ Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
// The quit action will show a confirmation dialog to avoid accidental exits.
- Mod+Shift+E { quit; }
+ Mod+Shift+Escape { quit; }
+ Ctrl+Alt+Delete { quit; }
// Powers off the monitors. To turn them back on, do any input like
// moving the mouse or pressing any other key.
Mod+Shift+P { power-off-monitors; }
}
-
-hotkey-overlay {
- skip-at-startup
-}
-
diff --git a/niri/dot-config/swayidle/config b/niri/dot-config/swayidle/config
new file mode 100644
index 0000000..3e7aa2b
--- /dev/null
+++ b/niri/dot-config/swayidle/config
@@ -0,0 +1,4 @@
+timeout 300 swaylock
+timeout 600 "niri msg action power-off-monitors"
+before-sleep swaylock
+lock swaylock
diff --git a/niri/dot-config/swaylock/config b/niri/dot-config/swaylock/config
new file mode 100644
index 0000000..858bb4b
--- /dev/null
+++ b/niri/dot-config/swaylock/config
@@ -0,0 +1,7 @@
+ignore-empty-password
+show-failed-attempts
+daemonize
+color=232136
+font=Inter
+font-size=12
+indicator-thickness=8
diff --git a/niri/dot-config/waybar/config.jsonc b/niri/dot-config/waybar/config.jsonc
new file mode 100644
index 0000000..232dd61
--- /dev/null
+++ b/niri/dot-config/waybar/config.jsonc
@@ -0,0 +1,103 @@
+// -*- mode: jsonc -*-
+{
+ "layer": "top",
+ "spacing": 8,
+ "modules-left": [
+ "niri/workspaces",
+ "privacy",
+ "niri/window"
+ ],
+ "modules-center": [
+ "clock"
+ ],
+ "modules-right": [
+ "tray",
+ "idle_inhibitor",
+ "battery",
+ "power-profiles-daemon",
+ "wireplumber",
+ "bluetooth",
+ "network",
+ "custom/notifications"
+ ],
+ "niri/workspaces": {
+ "format": "{icon}",
+ "format-icons": {
+ "web": "",
+ "chat": "",
+ "dev": "",
+ "games": ""
+ }
+ },
+ "privacy": {
+ "icon-size": 12
+ },
+ "clock": {
+ "format": "{:%a %H:%M}",
+ "tooltip-format": "{calendar}",
+ "calendar": {
+ "format": {
+ "today": "{}"
+ }
+ }
+ },
+ "tray": {
+ "spacing": 4,
+ "reverse-direction": true
+ },
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "format-icons": {
+ "activated": "",
+ "deactivated": ""
+ }
+ },
+ "battery": {
+ "format": "{icon} {capacity}%"
+ },
+ "power-profiles-daemon": {
+ "format-icons": {
+ "default": "",
+ "performance": "",
+ "balanced": "",
+ "power-saver": ""
+ }
+ },
+ "wireplumber": {
+ "format": "{icon} {volume}%",
+ "format-muted": " Muted",
+ "format-icons": ["", "", ""]
+ },
+ "bluetooth": {
+ "format-disabled": "",
+ "format-connected": " {num_connections}"
+ },
+ "network": {
+ "format-ethernet": " Wired",
+ "format-wifi": " {essid}",
+ "format-disconnected": " Disconnected",
+ "tooltip-format-ethernet": "Interface: {ifname}\nIP: {ipaddr}\nGateway: {gwaddr}",
+ "tooltip-format-wifi": "{frequency}GHz {signalStrength}%\n\nInterface: {ifname}\nIP: {ipaddr}\nGateway: {gwaddr}",
+ "tooltip-format-disconnected": ""
+ },
+ "custom/notifications": {
+ "exec": "swaync-client -swb",
+ "exec-if": "which swaync-client",
+ "return-type": "json",
+ "format": "{icon}",
+ "format-icons": {
+ "notification": "",
+ "none": "",
+ "dnd-notification": "",
+ "dnd-none": "",
+ "inhibited-notification": "",
+ "inhibited-none": "",
+ "dnd-inhibited-notification": "",
+ "dnd-inhibited-none": ""
+ },
+ "on-click": "swaync-client -t -sw",
+ "on-click-right": "swaync-client -d -sw",
+ "tooltip-format": "Notifications",
+ "escape": true
+ }
+}
diff --git a/niri/dot-config/waybar/style.css b/niri/dot-config/waybar/style.css
new file mode 100644
index 0000000..8ad17d9
--- /dev/null
+++ b/niri/dot-config/waybar/style.css
@@ -0,0 +1,130 @@
+* {
+ /* `otf-font-awesome` is required to be installed for icons */
+ font-family: FontAwesome, Inter, sans-serif;
+ font-size: 12px;
+}
+
+window#waybar {
+ background-color: rgba(26, 27, 38, 0.95);
+ color: #c0caf5;
+ transition-property: background-color;
+ transition-duration: .5s;
+}
+
+button {
+ /* Avoid rounded borders under each button name */
+ border: none;
+ border-radius: 0;
+ padding: 0 4px;
+}
+
+/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
+button:hover {
+ background: inherit;
+ box-shadow: inset 0 0 transparent;
+}
+
+#workspaces button {
+ background-color: transparent;
+ color: #ffffff;
+}
+
+#workspaces button:hover {
+ background: rgba(0, 0, 0, 0.2);
+}
+
+#workspaces button.focused {
+ background-color: #bb9af7;
+ color: #15161e;
+}
+
+#workspaces button.urgent {
+ background-color: #e0af68;
+ color: #15161e;
+}
+
+#clock,
+#battery,
+#network,
+#wireplumber,
+#tray,
+#idle_inhibitor,
+#power-profiles-daemon,
+#custom-notifications {
+ padding: 0 4px;
+ min-width: 1.5em;
+ color: #c0caf5;
+}
+
+#window,
+#workspaces {
+ margin: 0 4px;
+}
+
+/* If workspaces is the leftmost module, omit left margin */
+.modules-left > widget:first-child > #workspaces {
+ margin-left: 0;
+}
+
+#clock {
+ font-weight: bold;
+}
+
+#battery.charging, #battery.plugged {
+ background-color: #9ece6a;
+ color: #15161e;
+}
+
+#battery.critical:not(.charging) {
+ background-color: #f7768e;
+ color: #15161e;
+}
+
+#power-profiles-daemon.performance {
+ background-color: #e0af68;
+ color: #15161e;
+}
+
+#power-profiles-daemon.power-saver {
+ background-color: #9ece6a;
+ color: #15161e;
+}
+
+label:focus {
+ background-color: #000000;
+}
+
+#network.disconnected {
+ background-color: #f7768e;
+ color: #15161e;
+}
+
+#wireplumber.muted {
+ background-color: #f7768e;
+ color: #15161e;
+}
+
+#tray > .passive {
+ -gtk-icon-effect: dim;
+}
+
+#tray > .needs-attention {
+ -gtk-icon-effect: highlight;
+ background-color: #e0af68;
+ color: #15161e;
+}
+
+#idle_inhibitor.activated {
+ background-color: #e0af68;
+ color: #15161e;
+}
+
+#privacy {
+ padding: 0;
+}
+
+#privacy-item {
+ padding: 0 4px;
+ background-color: #e0af68;
+ color: #15161e;
+}
diff --git a/niri/dot-config/wpaperd/config.toml b/niri/dot-config/wpaperd/config.toml
new file mode 100644
index 0000000..bfdbea2
--- /dev/null
+++ b/niri/dot-config/wpaperd/config.toml
@@ -0,0 +1,7 @@
+[default]
+duration = "1h"
+mode = "center"
+initial-transition = false
+
+[any]
+path = "~/Pictures/Wallpapers"
diff --git a/ranger/dot-config/ranger/rc.conf b/ranger/dot-config/ranger/rc.conf
deleted file mode 100644
index 9ea8e37..0000000
--- a/ranger/dot-config/ranger/rc.conf
+++ /dev/null
@@ -1,757 +0,0 @@
-# ===================================================================
-# This file contains the default startup commands for ranger.
-# To change them, it is recommended to create either /etc/ranger/rc.conf
-# (system-wide) or ~/.config/ranger/rc.conf (per user) and add your custom
-# commands there.
-#
-# If you copy this whole file there, you may want to set the environment
-# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice.
-#
-# The purpose of this file is mainly to define keybindings and settings.
-# For running more complex python code, please create a plugin in "plugins/" or
-# a command in "commands.py".
-#
-# Each line is a command that will be run before the user interface
-# is initialized. As a result, you can not use commands which rely
-# on the UI such as :delete or :mark.
-# ===================================================================
-
-# ===================================================================
-# == Options
-# ===================================================================
-
-# Which viewmode should be used? Possible values are:
-# miller: Use miller columns which show multiple levels of the hierarchy
-# multipane: Midnight-commander like multipane view showing all tabs next
-# to each other
-set viewmode miller
-#set viewmode multipane
-
-# How many columns are there, and what are their relative widths?
-set column_ratios 1,3,4
-
-# Which files should be hidden? (regular expression)
-set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$
-
-# Show hidden files? You can toggle this by typing 'zh'
-set show_hidden false
-
-# Ask for a confirmation when running the "delete" command?
-# Valid values are "always", "never", "multiple" (default)
-# With "multiple", ranger will ask only if you delete multiple files at once.
-set confirm_on_delete always
-
-# Use non-default path for file preview script?
-# ranger ships with scope.sh, a script that calls external programs (see
-# README.md for dependencies) to preview images, archives, etc.
-#set preview_script ~/.config/ranger/scope.sh
-
-# Use the external preview script or display simple plain text or image previews?
-set use_preview_script true
-
-# Automatically count files in the directory, even before entering them?
-set automatically_count_files true
-
-# Open all images in this directory when running certain image viewers
-# like feh or sxiv? You can still open selected files by marking them.
-set open_all_images true
-
-# Be aware of version control systems and display information.
-set vcs_aware false
-
-# State of the four backends git, hg, bzr, svn. The possible states are
-# disabled, local (only show local info), enabled (show local and remote
-# information).
-set vcs_backend_git enabled
-set vcs_backend_hg disabled
-set vcs_backend_bzr disabled
-set vcs_backend_svn disabled
-
-# Truncate the long commit messages to this length when shown in the statusbar.
-set vcs_msg_length 50
-
-# Use one of the supported image preview protocols
-set preview_images true
-
-# Set the preview image method. Supported methods:
-#
-# * w3m (default):
-# Preview images in full color with the external command "w3mimgpreview"?
-# This requires the console web browser "w3m" and a supported terminal.
-# It has been successfully tested with "xterm" and "urxvt" without tmux.
-#
-# * iterm2:
-# Preview images in full color using iTerm2 image previews
-# (http://iterm2.com/images.html). This requires using iTerm2 compiled
-# with image preview support.
-#
-# This feature relies on the dimensions of the terminal's font. By default, a
-# width of 8 and height of 11 are used. To use other values, set the options
-# iterm2_font_width and iterm2_font_height to the desired values.
-#
-# * terminology:
-# Previews images in full color in the terminology terminal emulator.
-# Supports a wide variety of formats, even vector graphics like svg.
-#
-# * urxvt:
-# Preview images in full color using urxvt image backgrounds. This
-# requires using urxvt compiled with pixbuf support.
-#
-# * urxvt-full:
-# The same as urxvt but utilizing not only the preview pane but the
-# whole terminal window.
-#
-# * kitty:
-# Preview images in full color using kitty image protocol.
-# Requires python PIL or pillow library.
-# If ranger does not share the local filesystem with kitty
-# the transfer method is changed to encode the whole image;
-# while slower, this allows remote previews,
-# for example during an ssh session.
-# Tmux is unsupported.
-#
-# * ueberzug:
-# Preview images in full color with the external command "ueberzug".
-# Images are shown by using a child window.
-# Only for users who run X11 in GNU/Linux.
-set preview_images_method sixel
-
-# Delay in seconds before displaying an image with the w3m method.
-# Increase it in case of experiencing display corruption.
-set w3m_delay 0.02
-
-# Manually adjust the w3mimg offset when using a terminal which needs this
-set w3m_offset 0
-
-# Default iTerm2 font size (see: preview_images_method: iterm2)
-set iterm2_font_width 8
-set iterm2_font_height 11
-
-# Use a unicode "..." character to mark cut-off filenames?
-set unicode_ellipsis true
-
-# BIDI support - try to properly display file names in RTL languages (Hebrew, Arabic).
-# Requires the python-bidi pip package
-set bidi_support true
-
-# Show dotfiles in the bookmark preview box?
-set show_hidden_bookmarks true
-
-# Which colorscheme to use? These colorschemes are available by default:
-# default, jungle, snow, solarized
-set colorscheme default
-
-# Preview files on the rightmost column?
-# And collapse (shrink) the last column if there is nothing to preview?
-set preview_files true
-set preview_directories true
-set collapse_preview true
-
-# Wrap long lines in plain text previews?
-set wrap_plaintext_previews true
-
-# Save the console history on exit?
-set save_console_history true
-
-# Draw the status bar on top of the browser window (default: bottom)
-set status_bar_on_top false
-
-# Draw a progress bar in the status bar which displays the average state of all
-# currently running tasks which support progress bars?
-set draw_progress_bar_in_status_bar true
-
-# Draw borders around columns? (separators, outline, both, or none)
-# Separators are vertical lines between columns.
-# Outline draws a box around all the columns.
-# Both combines the two.
-set draw_borders separators
-
-# Display the directory name in tabs?
-set dirname_in_tabs true
-
-# Enable the mouse support?
-set mouse_enabled true
-
-# Display the file size in the main column or status bar?
-set display_size_in_main_column true
-set display_size_in_status_bar true
-
-# Display the free disk space in the status bar?
-set display_free_space_in_status_bar true
-
-# Display files tags in all columns or only in main column?
-set display_tags_in_all_columns true
-
-# Set a title for the window? Updates both `WM_NAME` and `WM_ICON_NAME`
-set update_title true
-
-# Set the tmux/screen window-name to "ranger"?
-set update_tmux_title true
-
-# Shorten the title if it gets long? The number defines how many
-# directories are displayed at once, 0 turns off this feature.
-set shorten_title 3
-
-# Show hostname in titlebar?
-set hostname_in_titlebar false
-
-# Abbreviate $HOME with ~ in the titlebar (first line) of ranger?
-set tilde_in_titlebar true
-
-# How many directory-changes or console-commands should be kept in history?
-set max_history_size 20
-set max_console_history_size 50
-
-# Try to keep so much space between the top/bottom border when scrolling:
-set scroll_offset 8
-
-# Flush the input after each key hit? (Noticeable when ranger lags)
-set flushinput true
-
-# Padding on the right when there's no preview?
-# This allows you to click into the space to run the file.
-set padding_right true
-
-# Save bookmarks (used with mX and `X) instantly?
-# This helps to synchronize bookmarks between multiple ranger
-# instances but leads to *slight* performance loss.
-# When false, bookmarks are saved when ranger is exited.
-set autosave_bookmarks true
-
-# Save the "`" bookmark to disk. This can be used to switch to the last
-# directory by typing "``".
-set save_backtick_bookmark true
-
-# You can display the "real" cumulative size of directories by using the
-# command :get_cumulative_size or typing "dc". The size is expensive to
-# calculate and will not be updated automatically. You can choose
-# to update it automatically though by turning on this option:
-set autoupdate_cumulative_size false
-
-# Turning this on makes sense for screen readers:
-set show_cursor false
-
-# One of: size, natural, basename, atime, ctime, mtime, type, random
-set sort natural
-
-# Additional sorting options
-set sort_reverse false
-set sort_case_insensitive true
-set sort_directories_first true
-set sort_unicode false
-
-# Enable this if key combinations with the Alt Key don't work for you.
-# (Especially on xterm)
-set xterm_alt_key false
-
-# Whether to include bookmarks in cd command
-set cd_bookmarks true
-
-# Changes case sensitivity for the cd command tab completion
-set cd_tab_case sensitive
-
-# Use fuzzy tab completion with the "cd" command. For example,
-# ":cd /u/lo/b