Dotfiles
Sway Config
This will be semi-automatically updated via the Bookstack REST API
Sway Config
# Default config for sway
#
# Copy this to ~/.config/sway/config and edit it to your liking.
#
# Read `man 5 sway` for a complete reference.
### Variables
#
# Logo key. Use Mod1 for Alt.
set $mod Mod4
# Home row direction keys, like vim
set $left h
set $down j
set $up k
set $right l
# Your preferred terminal emulator
#set $term kitty
set $term foot -f "Noto Sans Mono:size=12"
# Your preferred application launcher
# Note: pass the final command to swaymsg so that the resulting window can be opened
# on the original workspace that the command was run on.
#set $menu dmenu_path | dmenu | xargs swaymsg exec --
set $menu bemenu-run --fn "Source Code Pro" 20 | xargs swaymsg exec --
### Output configuration
#
# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/)
#output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
#
# Example configuration:
#
# output HDMI-A-1 resolution 1920x1080 position 1920,0
#
# You can get the names of your outputs by running: swaymsg -t get_outputs
### Idle configuration
#
# Example configuration:
#
# exec swayidle -w \
# timeout 300 'swaylock -f -c 000000' \
# timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
# before-sleep 'swaylock -f -c 000000'
#
# This will lock your screen after 300 seconds of inactivity, then turn off
# your displays after another 300 seconds, and turn your screens back on when
# resumed. It will also lock your screen before your computer goes to sleep.
### Input configuration
#
# Example configuration:
#
# input "2:14:SynPS/2_Synaptics_TouchPad" {
# dwt enabled
# tap enabled
# natural_scroll enabled
# middle_emulation enabled
# }
#
# You can get the names of your inputs by running: swaymsg -t get_inputs
# Read `man 5 sway-input` for more information about this section.
input type:touchpad {
tap enabled
natural_scroll enabled
accel_profile "flat"
}
### Key bindings
#
# Basics:
#
# Start a terminal
bindsym $mod+Return exec $term
# Kill focused window
bindsym $mod+q kill
# Start your launcher
bindsym $mod+Shift+d exec $menu
# Drag floating windows by holding down $mod and left mouse button.
# Resize them with right mouse button + $mod.
# Despite the name, also works for non-floating windows.
# Change normal to inverse to use left mouse button for resizing and right
# mouse button for dragging.
floating_modifier $mod normal
# Reload the configuration file
bindsym $mod+Shift+c reload
# Exit sway (logs you out of your Wayland session)
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'
#
# Moving around:
#
# Move your focus around
bindsym $mod+$left focus left
bindsym $mod+$down focus down
bindsym $mod+$up focus up
bindsym $mod+$right focus right
# Or use $mod+[up|down|left|right]
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# Move the focused window with the same, but add Shift
bindsym $mod+Shift+$left move left
bindsym $mod+Shift+$down move down
bindsym $mod+Shift+$up move up
bindsym $mod+Shift+$right move right
# Ditto, with arrow keys
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
#
# Workspaces:
#
# Switch to workspace
bindsym $mod+1 workspace number 1
bindsym $mod+2 workspace number 2
bindsym $mod+3 workspace number 3
bindsym $mod+4 workspace number 4
bindsym $mod+5 workspace number 5
bindsym $mod+6 workspace number 6
bindsym $mod+7 workspace number 7
bindsym $mod+8 workspace number 8
bindsym $mod+9 workspace number 9
bindsym $mod+0 workspace number 10
# Move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number 1, workspace number 1
bindsym $mod+Shift+2 move container to workspace number 2, workspace number 2
bindsym $mod+Shift+3 move container to workspace number 3, workspace number 3
bindsym $mod+Shift+4 move container to workspace number 4, workspace number 4
bindsym $mod+Shift+5 move container to workspace number 5, workspace number 5
bindsym $mod+Shift+6 move container to workspace number 6, workspace number 6
bindsym $mod+Shift+7 move container to workspace number 7, workspace number 7
bindsym $mod+Shift+8 move container to workspace number 8, workspace number 8
bindsym $mod+Shift+9 move container to workspace number 9, workspace number 9
bindsym $mod+Shift+0 move container to workspace number 10, workspace number 10
# Note: workspace numbers can have any name you want, not just numbers.
# We just use 1-10 as the default.
# Set monitor variables
set $internal_monitor eDP-1
set $second_monitor DP-1
# Assign workspaces to seperate monitors
output $internal_monitor pos 0 0
output $second_monitor pos 1080 0
workspace 1 output $internal_monitor
workspace 2 output $internal_monitor
workspace 3 output $internal_monitor
workspace 4 output $internal_monitor
workspace 5 output $internal_monitor
workspace 6 output $second_monitor
workspace 7 output $second_monitor
workspace 8 output $second_monitor
workspace 9 output $second_monitor
workspace 10 output $second_monitor
#
# Layout stuff:
#
# You can "split" the current object of your focus with
# $mod+b or $mod+v, for horizontal and vertical splits
# respectively.
bindsym $mod+n splith
bindsym $mod+v splitv
# Switch the current container between different layout styles
bindsym $mod+s layout stacking
bindsym $mod+z layout tabbed
bindsym $mod+e layout toggle split
# Make the current focus fullscreen
bindsym $mod+f fullscreen
# Toggle the current focus between tiling and floating mode
bindsym $mod+Shift+space floating toggle
# Swap focus between the tiling area and the floating area
bindsym $mod+space focus mode_toggle
# Move focus to the parent container
bindsym $mod+a focus parent
#
# Scratchpad:
#
# Sway has a "scratchpad", which is a bag of holding for windows.
# You can send windows there and get them back later.
# Move the currently focused window to the scratchpad
bindsym $mod+Shift+minus move scratchpad
# Show the next scratchpad window or hide the focused scratchpad window.
# If there are multiple scratchpad windows, this command cycles through them.
bindsym $mod+minus scratchpad show
#
# Resizing containers:
#
mode "resize" {
# left will shrink the containers width
# right will grow the containers width
# up will shrink the containers height
# down will grow the containers height
bindsym $left resize shrink width 100px
bindsym $down resize grow height 100px
bindsym $up resize shrink height 100px
bindsym $right resize grow width 100px
# Ditto, with arrow keys
bindsym Left resize shrink width 100px
bindsym Down resize grow height 100px
bindsym Up resize shrink height 100px
bindsym Right resize grow width 100px
# Return to default mode
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"
#
# Status Bar:
#
# Read `man 5 sway-bar` for more information about this section.
bar {
position top
# When the status_command prints a new line to stdout, swaybar updates.
# The default just shows the current date and time.
#status_command while date +'%Y-%m-%d %I:%M:%S %p'; do sleep 1; done
status_command while ~/.config/sway/status.sh; do sleep 1; done
colors {
statusline #ffffff
background #323232aa
inactive_workspace #323232aa #323232aa #000000
}
font "Source Code Pro"
pango_markup enabled
separator_symbol "$"
}
#
# Border Controls
#
default_border pixel
bindsym $mod+Shift+b exec swaymsg border toggle
#
# Startup Applications
#
exec swaybg -i $(find ~/Pictures/wallpapers -type f | shuf -n1) -m fill &
#
# Power Menu
#
bindsym $mod+x mode "(k) lock, (l) logout, (r) reboot, (s) shutdown"
mode "(k) lock, (l) logout, (r) reboot, (s) shutdown" {
bindsym k exec swaylock -c 000000, mode "default"
bindsym l exec swaymsg exit, mode "default"
bindsym r exec reboot, mode "default"
bindsym s exec shutdown now, mode "default"
bindsym Return mode "default"
bindsym Escape mode "default"
}
#
# Special Keybindings
#
# Map Caps Lock to Left Control
input type:keyboard {
xkb_options caps:ctrl_modifier
}
# Applications
bindsym $mod+w exec flatpak run io.gitlab.librewolf-community
# Volume
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% && pactl set-sink-mute @DEFAULT_SINK@ 0
bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% && pactl set-sink-mute @DEFAULT_SINK@ 0
bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle
# Media
bindsym XF86AudioPlay exec playerctl play-pause
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous
bindsym XF86Tools exec playerctl play-pause
bindsym XF86Favorites exec playerctl next
bindsym XF86Bluetooth exec playerctl previous
#Sticky Window
bindsym $mod+Shift+Return sticky toggle
# Brightness
bindsym XF86MonBrightnessUp exec brightnessctl set +10%
bindsym XF86MonBrightnessDown exec brightnessctl set --min-value=1 10%-
# Rotation
exec swaymsg input 1386:20824:Wacom_Pen_and_multitouch_sensor_Finger map_to_output $internal_monitor
bindsym $mod+Mod1+k exec swaymsg output eDP-1 transform normal && swaymsg input 1386:20824:Wacom_Pen_and_multitouch_sensor_Finger map_to_output $internal_monitor && swaymsg input 1386:20824:Wacom_Pen_and_multitouch_sensor_Pen map_to_output $internal_monitor
bindsym $mod+Mod1+j exec swaymsg output eDP-1 transform 180 && swaymsg input 1386:20824:Wacom_Pen_and_multitouch_sensor_Finger map_to_output $internal_monitor && swaymsg input 1386:20824:Wacom_Pen_and_multitouch_sensor_Pen map_to_output $internal_monitor
bindsym $mod+Mod1+l exec swaymsg output eDP-1 transform 90 && swaymsg input 1386:20824:Wacom_Pen_and_multitouch_sensor_Finger map_to_output $internal_monitor && swaymsg input 1386:20824:Wacom_Pen_and_multitouch_sensor_Pen map_to_output $internal_monitor
bindsym $mod+Mod1+h exec swaymsg output eDP-1 transform 270 && swaymsg input 1386:20824:Wacom_Pen_and_multitouch_sensor_Finger map_to_output $internal_monitor && swaymsg input 1386:20824:Wacom_Pen_and_multitouch_sensor_Pen map_to_output $internal_monitor
include /etc/sway/config.d/*
status.sh
date=$(date +'%Y-%m-%d %I:%M:%S %p')
wifi_details=$(nmcli -t -f active,ssid,freq,rate,signal dev wifi list --rescan no | grep -e "^yes:" | sed "s/yes://g;s/:/ /g")
wired_info=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
if [ -z "$wifi_details" ]; then
network_info="Wired $wired_info"
else
network_info="$wifi_details%"
fi
SINK=0
current_brightness=$(brightnessctl | grep Current | cut -d '(' -f2 | cut -d '%' -f1)
current_sink_muted=$(pactl list sinks | grep '^[[:space:]]Mute:' | head -n $(( $SINK + 1 )) | tail -n 1 | cut -d ":" -f2 | sed -e 's/^[ \t]*//')
if [ "$current_sink_muted" = "yes" ]; then
current_volume="muted"
else
current_volume=$(pactl list sinks | grep '^[[:space:]]Volume:' | head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,')
fi
current_mem=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
current_mem_rounded=`printf "%.2f" $current_mem`
current_cpu=$[100-$(vmstat 1 2|tail -1|awk '{print $15}')]
current_cpu_rounded=`printf "%.2f" $current_cpu`
battery_level=$(cat /sys/class/power_supply/BAT0/capacity)
battery_status=$(cat /sys/class/power_supply/BAT0/status)
if [ "$battery_status" = "Charging" ]; then
battery_prefix="+"
fi
if [ "$battery_level" -le "15" ]; then
battery_color="red"
else
battery_color="springgreen"
fi
echo "<span foreground='limegreen' weight='bold'>$network_info</span> <span foreground='palegreen' weight='bold'>CPU:$current_cpu%</span> <span foreground='mediumspringgreen' weight='bold'>MEM:$current_mem_rounded</span> <span foreground='$battery_color' weight='bold'>BATT:$battery_prefix$battery_level</span> <span foreground='mediumseagreen' weight='bold'>LUM:$current_brightness</span> <span foreground='yellowgreen' weight='bold'>VOL:$current_volume</span> <span foreground='lightseagreen' weight='bold'>$date</span> "
Automatic Cloudflare DNS Update
Create a script that queries the current IP address, then updates it using Cloudflare's API
# Aquire the permanent, publically addressable ipv6 address of the eth0 adapter
ip -6 addr show dev eth0 mngtmpaddr | grep -oE "([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}"
# Aquire the ipv4 address
curl https://api.ipify.org
import http.client requests json
ipv4_data = json.loads(requests.get('https://api.ipify.org?format=json').text)
ipv4_addr = ipv4_data["ip"]
# Aquire the permanent, publically addressable ipv6 address of the eth0 adapter
ipv6_addr = subprocess.run('ip -6 addr show dev eth0 mngtmpaddr | grep -oE "([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}"')
# Aquire zones
conn = http.client.HTTPSConnection("api.cloudflare.com")
headers = {
'Content-Type': "application/json",
'Authorization': "Bearer <API_TOKEN>"
}
conn.request("GET", "/client/v4/zones", headers=headers)
res = conn.getresponse()
data = res.read()
# Modify all DNS records
...
NixOS Config
NixOS Config
configuration.nix
{ config, lib, pkgs, ... }:
{
imports =
[ ./hardware-configuration.nix ];
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
nix.settings.experimental-features = [ "nix-command" "flakes" ];
nix.optimise.automatic = true;
nixpkgs.config.allowUnfree = false;
networking.hostName = "coracle";
networking.networkmanager.enable = true;
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = false;
time.timeZone = "America/New_York";
fonts.packages = with pkgs; [
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
liberation_ttf
fira-code
fira-code-symbols
nerdfonts
];
security.rtkit.enable = true;
security.pam.services.hyprlock = {};
services.printing.enable = true;
services.udisks2.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
services.flatpak.enable = true;
xdg.portal = {
enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-hyprland pkgs.xdg-desktop-portal-gtk ];
};
services.openssh = {
enable = true;
ports = [ 22 ];
settings = {
PasswordAuthentication = false;
PermitRootLogin = "prohibit-password";
};
};
services.auto-cpufreq.enable = true;
powerManagement.enable = true;
users.mutableUsers = true;
users.defaultUserShell = pkgs.zsh;
users.users.root = {
};
users.users.game = {
isNormalUser = true;
createHome = true;
extraGroups = [ "networkmanager" ];
};
users.users.code = {
isNormalUser = true;
createHome = true;
extraGroups = [ "networkmanager" "adbusers" "dialout" ];
};
environment.systemPackages = [ ];
programs.zsh.enable = true;
programs.hyprland.enable = true;
programs.neovim = {
enable = true;
configure = {
customRC = ''
set number relativenumber
filetype plugin indent on
'';
};
viAlias = true;
vimAlias = true;
};
programs.tmux = {
enable = true;
extraConfig = import ./tmux.conf;
};
programs.firejail = {
enable = true;
};
programs.adb.enable = true;
virtualisation.containers.enable = true;
virtualisation = {
podman = {
enable = true;
};
};
networking.firewall.enable = false;
system.copySystemConfiguration = true;
system.autoUpgrade = {
enable = true;
flake = "inputs.self.outPath";
flags = [
"--update-input"
"nixpkgs"
"-L"
];
dates = "02:00";
randomizedDelaySec = "45min";
};
system.stateVersion = "24.11";
}
NixOS Config
bemenu.nix
{ config, pkgs, lib, ... }:
{
programs.bemenu = {
enable = true;
settings = {
line-height = 28;
fn = "Fira Code";
fb = "#1e1e2e";
ff = "#cdd6f4";
nb = "#1e1e2e";
nf = "#cdd6f4";
tb = "#1e1e2e";
hb = "#1e1e2e";
tf = "#f38ba8";
hf = "#f9e2af";
af = "#cdd6f4";
ab = "#1e1e2e";
};
};
}
NixOS Config
hypridle.nix
{ config, pkgs, lib, ... }:
{
services.hypridle = {
enable = true;
settings = {
general = {
before_sleep_cmd = "hyprlock --immediate";
after_sleep_cmd = "hyprctl dispatch dpms on";
ignore_dbus_inhibit = false;
lock_cmd = "hyprlock --immediate";
};
};
};
}
NixOS Config
hyprland.nix
{ config, pkgs, lib, ... }:
{
wayland.windowManager.hyprland = {
enable = true;
settings = {
"$browser" = "flatpak run --user io.gitlab.librewolf-community";
"$mainMod" = "SUPER";
"$menu" = "bemenu-run --fn Fira Code";
"$terminal" = "kitty";
monitor=",highrr,auto,auto";
exec-once="waybar";
general = {
allow_tearing=false;
border_size=2;
"col.active_border"="rgba(33ccffee) rgba(00ff99ee) 45deg";
"col.inactive_border"="rgba(595959aa)";
gaps_in=5;
gaps_out=20;
layout="dwindle";
resize_on_border=true;
};
animations = {
"bezier" = "myBezier, 0.05, 0.9, 0.1, 1.05";
"animation" = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
enabled = true;
};
decoration = {
rounding = 10;
active_opacity=1.0;
"col.shadow"="rgba(1a1a1aee)";
drop_shadow=true;
inactive_opacity=1.0;
shadow_range=4;
shadow_render_power=3;
blur = {
"enabled"="true";
"passes"="1";
"size"="3";
"vibrancy"="0.169600";
};
};
dwindle = {
preserve_split=true;
pseudotile=true;
};
master = {
new_status="master";
};
input = {
touchpad = {
natural_scroll=true;
};
follow_mouse=1;
kb_options="ctrl:nocaps";
sensitivity=0;
};
env = [
"XCURSOR_SIZE,38"
"HYPRCURSOR_SIZE,38"
"BEMENU_BACKEND,wayland"
];
bind = [
"$mainMod, Return, exec, $terminal"
"$mainMod, Q, killactive"
"$mainMod SHIFT, E, exit"
"$mainMod, W, exec, $browser"
"$mainMod SHIFT, Space, togglefloating"
"$mainMod SHIFT, D, exec, $menu"
"$mainMod, F, fullscreen, 1"
"$mainMod, E, togglegroup"
"$mainMod, S, changegroupactive"
"$mainMod SHIFT, minus, movetoworkspacesilent, special"
"$mainMod, minus, togglespecialworkspace, special"
"$mainMod, h, movefocus, l"
"$mainMod, l, movefocus, r"
"$mainMod, k, movefocus, u"
"$mainMod, j, movefocus, d"
"$mainMod, 1, workspace, 1"
"$mainMod, 2, workspace, 2"
"$mainMod, 3, workspace, 3"
"$mainMod, 4, workspace, 4"
"$mainMod, 5, workspace, 5"
"$mainMod, 6, workspace, 6"
"$mainMod, 7, workspace, 7"
"$mainMod, 8, workspace, 8"
"$mainMod, 9, workspace, 9"
"$mainMod, 0, workspace, 10"
"$mainMod SHIFT, 1, movetoworkspace, 1"
"$mainMod SHIFT, 1, workspace, 1"
"$mainMod SHIFT, 2, movetoworkspace, 2"
"$mainMod SHIFT, 2, workspace, 2"
"$mainMod SHIFT, 3, movetoworkspace, 3"
"$mainMod SHIFT, 3, workspace, 3"
"$mainMod SHIFT, 4, movetoworkspace, 4"
"$mainMod SHIFT, 4, workspace, 4"
"$mainMod SHIFT, 5, movetoworkspace, 5"
"$mainMod SHIFT, 5, workspace, 5"
"$mainMod SHIFT, 6, movetoworkspace, 6"
"$mainMod SHIFT, 6, workspace, 6"
"$mainMod SHIFT, 7, movetoworkspace, 7"
"$mainMod SHIFT, 7, workspace, 7"
"$mainMod SHIFT, 8, movetoworkspace, 8"
"$mainMod SHIFT, 8, workspace, 8"
"$mainMod SHIFT, 9, movetoworkspace, 9"
"$mainMod SHIFT, 9, workspace, 9"
"$mainMod SHIFT, 0, movetoworkspace, 10"
"$mainMod SHIFT, 0, workspace, 10"
"$mainMod SHIFT, h, movewindoworgroup, l"
"$mainMod SHIFT, j, movewindoworgroup, d"
"$mainMod SHIFT, k, movewindoworgroup, u"
"$mainMod SHIFT, l, movewindoworgroup, r"
"$mainMod, mouse_down, workspace, e+1"
"$mainMod, mouse_up, workspace, e-1"
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioNext, exec, playerctl next"
", XF86AudioPrev, exec, playerctl previous"
", XF86Tools, exec, playerctl play-pause"
", XF86Favorites, exec, playerctl next"
", XF86Bluetooth, exec, playerctl previous"
", XF86MonBrightnessUp, exec, brightnessctl set +10%"
", XF86MonBrightnessDown, exec, brightnessctl set --min-value=1 10%-"
", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_SINK@ 5%+ && wpctl set-mute @DEFAULT_SINK@ 0"
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_SINK@ 5%- && wpctl set-mute @DEFAULT_SINK@ 0"
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_SINK@ toggle"
", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle"
"$mainMod&Alt_L, k, exec, hyprctl keyword monitor ,preferred,auto,1,transform,0"
"$mainMod&Alt_L, k, exec, hyprctl keyword input:touchdevice:transform 0"
"$mainMod&Alt_L, k, exec, hyprctl keyword input:tablet:transform 0"
"$mainMod&Alt_L, h, exec, hyprctl keyword monitor ,preferred,auto,1,transform,1"
"$mainMod&Alt_L, h, exec, hyprctl keyword input:touchdevice:transform 1"
"$mainMod&Alt_L, h, exec, hyprctl keyword input:tablet:transform 1"
"$mainMod&Alt_L, j, exec, hyprctl keyword monitor ,preferred,auto,1,transform,2"
"$mainMod&Alt_L, j, exec, hyprctl keyword input:touchdevice:transform 2"
"$mainMod&Alt_L, j, exec, hyprctl keyword input:tablet:transform 2"
"$mainMod&Alt_L, l, exec, hyprctl keyword monitor ,preferred,auto,1,transform,3"
"$mainMod&Alt_L, l, exec, hyprctl keyword input:touchdevice:transform 3"
"$mainMod&Alt_L, l, exec, hyprctl keyword input:tablet:transform 3"
];
bindm = [
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
];
}; #Settings block
extraConfig = ''
bind=$mainMod,R,submap,resize
submap=resize
binde=,l,resizeactive,150 0
binde=,h,resizeactive,-150 0
binde=,k,resizeactive,0 -150
binde=,j,resizeactive,0 150
bind=,escape,submap,reset
submap=reset
$mode-system = (k) lock | (e) exit | (s) poweroff | (r) reboot
bind = $mainMod, x, submap, $mode-system
submap = $mode-system
bind = , k, exec, hyprlock --immediate
bindl = , k, submap, reset
bind = , e, exit
bind = , r, exec, systemctl reboot
bind = , s, exec, systemctl poweroff
bind = , escape, submap, reset
submap = reset
'';
};
}
NixOS Config
hyprlock.nix
{ config, pkgs, lib, ... }:
{
programs.hyprlock = {
enable = true;
settings = {
general = {
disable_loading_bar = true;
grace = 300;
hide_cursor = true;
no_fade_in = false;
};
background = [
{
path = "screenshot";
blur_passes = 3;
blur_size = 8;
}
];
input-field = [
{
size = "200, 50";
position = "0, -80";
monitor = "";
dots_center = true;
fade_on_empty = false;
font_color = "rgb(202, 211, 245)";
inner_color = "rgb(91, 96, 120)";
outer_color = "rgb(24, 25, 38)";
outline_thickness = 5;
placeholder_text = "<span foreground='##cad3f5'>Password...</span>";
shadow_passes = 2;
}
];
};
};
}
NixOS Config
kitty.nix
{ config, pkgs, lib, ... }:
{
programs.kitty = lib.mkForce {
enable = true;
settings = {
confirm_os_window_close = 0;
dynamic_background_opacity = true;
background_opacity = "0.5";
background_blur = 5;
font_family = "Noto Sans";
};
};
}
NixOS Config
neovim.nix
{ config, pkgs, lib, ... }:
{
programs.neovim = {
enable = true;
extraConfig = ''
set number relativenumber
'';
viAlias = true;
vimAlias = true;
defaultEditor = true;
};
}
NixOS Config
waybar.nix
{ config, pkgs, lib, ... }:
{
programs.waybar = {
enable = true;
settings = {
mainBar = {
layer = "top";
position = "top";
modules-left = [ "hyprland/workspaces" "hyprland/submap" ];
modules-center = [ "mpris" ];
modules-right = [ "backlight" "privacy" "wireplumber" "disk" "load" "memory" "battery" "tray" "clock" ];
"hyprland/workspaces" = {
all-outputs = true;
on-click = "activate";
};
"wireplumber" = {
"format" = "{icon} {volume}%";
"format-muted" = "";
"on-click" = "set-mute @DEFAULT_SINK@ toggle";
"max-volume" = 150;
"scroll-step" = 0.2;
format-icons = [ "" "" "" ];
};
disk = {
format = " {specific_free:0.0f}GB";
unit = "GB";
};
"mpris" = {
"format" = "{player_icon} {title}";
"format-paused" = "{status_icon} <i>{title}</i>";
"player-icons" = {
"default" = "";
"mpv" = "";
};
"status-icons" = {
"paused" = "";
};
max-length = 50;
"ignored-players" = [ "firefox" ];
};
"clock" = {
"tooltip-format" = "<tt><small>{calendar}</small></tt>";
"format" = " {:%H:%M %m/%d/%Y}";
};
"calendar" = {
"mode" = "year";
"mode-mon-col" = 3;
"weeks-pos" = "right";
"on-scroll" = 1;
"format" = {
"months" = "<span color='#ffead3'><b>{}</b></span>";
"days" = "<span color='#ecc6d9'><b>{}</b></span>";
"weeks" = "<span color='#99ffdd'><b>W{}</b></span>";
"weekdays" = "<span color='#ffcc66'><b>{}</b></span>";
"today" = "<span color='#ff6699'><b><u>{}</u></b></span>";
};
};
"actions" = {
"on-click-right" = "mode";
"on-click-forward" = "tz_up";
"on-click-backward" = "tz_down";
"on-scroll-up" = "shift_up";
"on-scroll-down" = "shift_down";
};
"backlight" = {
"device" = "intel_backlight";
"format" = "{icon}";
"format-icons" = ["" "" "" "" "" "" "" "" ""];
};
"battery" = {
"states" = {
"warning" = 30;
"critical" = 15;
};
"format-icons" = [ "" "" "" "" "" "" "" "" "" "" ];
"format" = "{icon} {capacity}%";
# "format-charging" = " {capacity}%";
# "format-plugged" = " {capacity}%";
"format-alt" = "{time}";
};
};
};
style = ''
@import "/home/.home-manager/mocha.css";
* {
font-family: Fira Code;
font-size: 17px;
min-height: 0;
}
#waybar {
background: transparent;
color: @text;
margin: 5px 5px;
}
#workspaces {
border-radius: 1rem;
margin: 5px;
background-color: @surface0;
margin-left: 1rem;
}
#workspaces button {
color: @lavender;
border-radius: 1rem;
padding: 0.4rem;
}
#workspaces button.active {
color: @sky;
border-radius: 1rem;
}
#workspaces button:hover {
color: @sapphire;
border-radius: 1rem;
}
#custom-music,
#backlight,
#privacy,
#network,
#wireplumber,
#disk,
#load,
#memory,
#battery,
#tray,
#clock {
background-color: @surface0;
padding: 0.5rem 1rem;
margin: 5px 0;
}
#clock {
color: @blue;
border-radius: 0px 1rem 1rem 0px;
margin-right: 1rem;
}
#battery {
color: @green;
}
#battery.charging {
color: @green;
}
#battery.warning:not(.charging) {
color: @red;
}
#backlight {
color: @yellow;
margin-left: 1rem;
border-radius: 1rem 0px 0px 1rem;
}
#wireplumber {
color: @maroon;
}
#tray {
border-radius: 0px 0px 0px 0px
}
'';
};
}
mocha.css
@define-color rosewater #f5e0dc;
@define-color flamingo #f2cdcd;
@define-color pink #f5c2e7;
@define-color mauve #cba6f7;
@define-color red #f38ba8;
@define-color maroon #eba0ac;
@define-color peach #fab387;
@define-color yellow #f9e2af;
@define-color green #a6e3a1;
@define-color teal #94e2d5;
@define-color sky #89dceb;
@define-color sapphire #74c7ec;
@define-color blue #89b4fa;
@define-color lavender #b4befe;
@define-color text #cdd6f4;
@define-color subtext1 #bac2de;
@define-color subtext0 #a6adc8;
@define-color overlay2 #9399b2;
@define-color overlay1 #7f849c;
@define-color overlay0 #6c7086;
@define-color surface2 #585b70;
@define-color surface1 #45475a;
@define-color surface0 #313244;
@define-color base #1e1e2e;
@define-color mantle #181825;
@define-color crust #11111b;
NixOS Config
zsh.nix
{ config, lib, pkgs, ...}:
{
programs.zsh = {
enable = true;
enableCompletion = true;
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
};
}
NixOS Config
tmux.conf
''
set -g mouse on
set-window-option -g mode-keys vi
unbind C-B
set -g prefix C-Space
bind C-Space send-prefix
bind R source-file ~/.tmux.conf \; display "Reloaded!"
set-option -g history-limit 50000
bind C-j select-pane -D
bind C-k select-pane -U
bind C-h select-pane -L
bind C-l select-pane -R
bind j select-pane -D
bind k select-pane -U
bind h select-pane -L
bind l select-pane -R
bind r switch-client -T RESIZE
bind -T RESIZE k resize-pane -U \; switch-client -T RESIZE
bind -T RESIZE j resize-pane -D \; switch-client -T RESIZE
bind -T RESIZE h resize-pane -L \; switch-client -T RESIZE
bind -T RESIZE l resize-pane -R \; switch-client -T RESIZE
bind -T RESIZE K resize-pane -U 5 \; switch-client -T RESIZE
bind -T RESIZE J resize-pane -D 5 \; switch-client -T RESIZE
bind -T RESIZE H resize-pane -L 5 \; switch-client -T RESIZE
bind -T RESIZE L resize-pane -R 5 \; switch-client -T RESIZE
bind s split-window -c "#{pane_current_path}"
bind v split-window -h -c "#{pane_current_path}"
bind Space new-window -c "#{pane_current_path}"
bind C-Space new-window -c "#{pane_current_path}"
unbind x
bind c confirm-before -p "kill-pane #W? (y/n)" kill-pane
bind N previous-window
bind y switch-client -T copy-mode
''
NixOS Config
nixvim.nix
let
nixvim = import (builtins.fetchGit {
url = "https://github.com/nix-community/nixvim";
});
in
{
imports = [
nixvim.homeManagerModules.nixvim
];
programs.nixvim = {
enable = true;
defaultEditor = true;
vimdiffAlias = true;
viAlias = true;
vimAlias = true;
opts = {
number = true;
relativenumber = true;
shiftwidth = 2;
};
plugins = {
lualine.enable = true;
bufferline.enable = true;
nvim-tree.enable = true;
telescope = {
enable = true;
extensions = {
file-browser.enable = true;
};
keymaps = {
"<C-p>" = {
action = "git_files";
options = {
desc = "Telescope Git Files";
};
};
"<leader>fg" = "live_grep";
};
};
indent-blankline.enable = true;
cmp.enable = true;
lsp = {
enable = true;
servers = {
nixd.enable = true;
};
};
};
colorschemes.gruvbox.enable = true;
};
}
NixOS Config
shared-home.nix
{ config, pkgs, lib, inputs, ... }:
{
imports = [
./bemenu.nix
./hypridle.nix
./hyprland.nix
./hyprlock.nix
./kitty.nix
# ./neovim.nix
./nixvim.nix
./waybar.nix
./zsh.nix
];
home.stateVersion = "24.05"; # Please read the comment before changing.
home.packages = [
pkgs.grim
pkgs.slurp
pkgs.playerctl
pkgs.brightnessctl
pkgs.wl-clipboard
pkgs.qrencode
pkgs.libarchive
];
home.file = { };
home.sessionVariables = { };
xdg.userDirs = {
enable = true;
createDirectories = true;
};
programs.home-manager.enable = true;
programs.xplr.enable = true;
programs.imv.enable = true;
programs.bat.enable = true;
programs.zathura = {
enable = true;
extraConfig = ''
set selection-clipboard clipboard
set sandbox strict
'';
};
services.playerctld.enable = true;
}