···11+{ ... }:
22+{
33+ # Set your time zone.
44+ time.timeZone = "America/Chicago";
55+66+ # Select internationalisation properties.
77+ i18n.defaultLocale = "en_US.UTF-8";
88+ # console = {
99+ # font = "Lat2-Terminus16";
1010+ # keyMap = "us";
1111+ # useXkbConfig = true; # use xkb.options in tty.
1212+ # };
1313+1414+ # Automatic doc cache generation
1515+ documentation.man.generateCaches = true;
1616+1717+ # Automatic system upgrades
1818+ system.autoUpgrade = {
1919+ enable = true;
2020+ dates = "09:00";
2121+ randomizedDelaySec = "45min";
2222+ };
2323+2424+ # Automatic Garbage Collection
2525+ nix.gc.automatic = true;
2626+ nix.gc.options = "--delete-older-than 8d";
2727+ nix.settings.trusted-users = [ "@wheel" ];
2828+2929+ # I don't care that much about free vs unfree
3030+ nixpkgs.config.allowUnfree = true;
3131+}
-67
configuration.nix
···11-# Edit this configuration file to define what should be installed on
22-## your system. Help is available in the configuration.nix(5) man page, on
33-# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
44-55-{ ... }:
66-77-{
88- imports =
99- [
1010- # Include the results of the hardware scan.
1111- ./hardware-configuration.nix
1212- ./boot.nix
1313- ./networking.nix
1414- #./gui.nix
1515- ./users.nix
1616- ./packages.nix
1717- ./services.nix
1818- ];
1919- # Set your time zone.
2020- time.timeZone = "America/Chicago";
2121-2222- # Select internationalisation properties.
2323- i18n.defaultLocale = "en_US.UTF-8";
2424- # console = {
2525- # font = "Lat2-Terminus16";
2626- # keyMap = "us";
2727- # useXkbConfig = true; # use xkb.options in tty.
2828- # };
2929-3030- # Copy the NixOS configuration file and link it from the resulting system
3131- # (/run/current-system/configuration.nix). This is useful in case you
3232- # accidentally delete configuration.nix.
3333- #system.copySystemConfiguration = true;
3434-3535- # Automatic doc cache generation
3636- documentation.man.generateCaches = true;
3737-3838- # Automatic system upgrades
3939- system.autoUpgrade = {
4040- enable = true;
4141- dates = "09:00";
4242- randomizedDelaySec = "45min";
4343- };
4444-4545- # Automatic Garbage Collection
4646- nix.gc.automatic = true;
4747- nix.gc.options = "--delete-older-than 8d";
4848-4949- # This option defines the first version of NixOS you have installed on this particular machine,
5050- # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
5151- #
5252- # Most users should NEVER change this value after the initial install, for any reason,
5353- # even if you've upgraded your system to a new NixOS release.
5454- #
5555- # This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
5656- # so changing it will NOT upgrade your system.
5757- #
5858- # This value being lower than the current NixOS release does NOT mean your system is
5959- # out of date, out of support, or vulnerable.
6060- #
6161- # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
6262- # and migrated your data accordingly.
6363- #
6464- # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
6565- system.stateVersion = "23.11"; # Did you read the comment?
6666-6767-}
···11+# Edit this configuration file to define what should be installed on
22+# your system. Help is available in the configuration.nix(5) man page, on
33+# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
44+55+{
66+ config,
77+ lib,
88+ pkgs,
99+ inputs,
1010+ ...
1111+}:
1212+let
1313+ system = pkgs.stdenv.targetPlatform.system;
1414+ agave = (builtins.getFlake "/home/noah/repos/agave");
1515+in
1616+{
1717+ imports = [
1818+ # Include the results of the hardware scan.
1919+ ./hardware-configuration.nix
2020+ agave.nixosModules.default
2121+ ];
2222+2323+ nix.settings.experimental-features = [
2424+ "nix-command"
2525+ "flakes"
2626+ ];
2727+2828+ # Use the systemd-boot EFI boot loader.
2929+ boot.loader.systemd-boot.enable = true;
3030+ #boot.loader.grub.device = "nodev";
3131+ #boot.loader.grub.efiSupport = true;
3232+ #boot.loader.grub.useOSProber = true;
3333+ boot.loader.efi.canTouchEfiVariables = true;
3434+3535+ # Use latest kernel.
3636+ boot.kernelPackages = pkgs.linuxPackages_latest;
3737+3838+ networking.hostName = "edge"; # Define your hostname.
3939+4040+ # Configure network connections interactively with nmcli or nmtui.
4141+ networking.networkmanager.enable = true;
4242+4343+ # Set your time zone.
4444+ # time.timeZone = "Europe/Amsterdam";
4545+4646+ # Configure network proxy if necessary
4747+ # networking.proxy.default = "http://user:password@proxy:port/";
4848+ # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
4949+5050+ # Select internationalisation properties.
5151+ i18n.defaultLocale = "en_US.UTF-8";
5252+ console = {
5353+ font = "Lat2-Terminus16";
5454+ keyMap = "us";
5555+ #useXkbConfig = true; # use xkb.options in tty.
5656+ };
5757+5858+ # Enable the X11 windowing system.
5959+ # services.xserver.enable = true;
6060+6161+ # Configure keymap in X11
6262+ # services.xserver.xkb.layout = "us";
6363+ # services.xserver.xkb.options = "eurosign:e,caps:escape";
6464+6565+ # Enable CUPS to print documents.
6666+ # services.printing.enable = true;
6767+6868+ # Enable sound.
6969+ # services.pulseaudio.enable = true;
7070+ # OR
7171+ # services.pipewire = {
7272+ # enable = true;
7373+ # pulse.enable = true;
7474+ # };
7575+7676+ # Enable touchpad support (enabled default in most desktopManager).
7777+ # services.libinput.enable = true;
7878+7979+ # Define a user account. Don't forget to set a password with ‘passwd’.
8080+ # users.users.alice = {
8181+ # isNormalUser = true;
8282+ # extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
8383+ # packages = with pkgs; [
8484+ # tree
8585+ # ];
8686+ # };
8787+8888+ # programs.firefox.enable = true;
8989+9090+ # List packages installed in system profile.
9191+ # You can use https://search.nixos.org/ to find more packages (and options).
9292+ environment.systemPackages = with pkgs; [
9393+ neovim
9494+ wget
9595+ git
9696+ htop
9797+ inputs.agenix.packages."${system}".agenix
9898+ agave.packages.${system}.solana
9999+ agave.packages.${system}.solana-keygen
100100+ ];
101101+102102+ services.tailscale.useRoutingFeatures = "both";
103103+104104+ # Some programs need SUID wrappers, can be configured further or are
105105+ # started in user sessions.
106106+ # programs.mtr.enable = true;
107107+ # programs.gnupg.agent = {
108108+ # enable = true;
109109+ # enableSSHSupport = true;
110110+ # };
111111+112112+ # List services that you want to enable:
113113+114114+ # Enable the OpenSSH daemon.
115115+ services.openssh.enable = true;
116116+ services.openssh.openFirewall = true;
117117+118118+ # Open ports in the firewall.
119119+ # networking.firewall.allowedTCPPorts = [ ... ];
120120+ # networking.firewall.allowedUDPPorts = [ ... ];
121121+ # Or disable the firewall altogether.
122122+ networking.firewall.enable = true;
123123+ networking.firewall = {
124124+ allowPing = true;
125125+ allowedUDPPorts = [ ];
126126+ allowedUDPPortRanges = [
127127+ # Agave
128128+ {
129129+ from = 8000;
130130+ to = 8020;
131131+ }
132132+ ];
133133+ allowedTCPPorts = [
134134+ 2375
135135+ 3000
136136+ # Agave
137137+ 8001
138138+ 8899
139139+ 8900
140140+ 10000
141141+ ];
142142+ };
143143+ security.pam.loginLimits = [
144144+ {
145145+ domain = "*";
146146+ type = "soft";
147147+ item = "nofile";
148148+ value = "100000";
149149+ }
150150+ {
151151+ domain = "*";
152152+ type = "hard";
153153+ item = "nofile";
154154+ value = "1000000";
155155+ }
156156+ ];
157157+158158+ age.secrets.validator-identity = {
159159+ file = ../../secrets/validator-identity.age;
160160+ owner = "sol";
161161+ group = "sol";
162162+ };
163163+ services.ambient-validator = {
164164+ enable = true;
165165+ package = agave.packages.${system}.ambient-validator;
166166+ # this needs to be a secret
167167+ identityKeypair = config.age.secrets.validator-identity.path;
168168+ rpcBindAddress = "0.0.0.0";
169169+ geyserPluginConfig = {
170170+ libpath = "${agave.packages.${system}.yellowstone-geyser}/lib/libyellowstone_grpc_geyser.so";
171171+ log = {
172172+ level = "info";
173173+ };
174174+ tokio = {
175175+ worker_threads = 4;
176176+ affinity = null;
177177+ };
178178+ grpc = {
179179+ address = "0.0.0.0:10000";
180180+ };
181181+ };
182182+ };
183183+ # Copy the NixOS configuration file and link it from the resulting system
184184+ # (/run/current-system/configuration.nix). This is useful in case you
185185+ # accidentally delete configuration.nix.
186186+ # system.copySystemConfiguration = true;
187187+188188+ # This option defines the first version of NixOS you have installed on this particular machine,
189189+ # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
190190+ #
191191+ # Most users should NEVER change this value after the initial install, for any reason,
192192+ # even if you've upgraded your system to a new NixOS release.
193193+ #
194194+ # This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
195195+ # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
196196+ # to actually do that.
197197+ #
198198+ # This value being lower than the current NixOS release does NOT mean your system is
199199+ # out of date, out of support, or vulnerable.
200200+ #
201201+ # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
202202+ # and migrated your data accordingly.
203203+ #
204204+ # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
205205+ system.stateVersion = "25.11"; # Did you read the comment?
206206+207207+}
···11+# Edit this configuration file to define what should be installed on
22+## your system. Help is available in the configuration.nix(5) man page, on
33+# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
44+55+{ ... }:
66+{
77+ imports = [
88+ # Include the results of the hardware scan.
99+ ./hardware-configuration.nix
1010+ ./boot.nix
1111+ ./networking.nix
1212+ #./gui.nix
1313+ ./packages.nix
1414+ ./services.nix
1515+ ];
1616+1717+ nixpkgs.config.allowUnfree = true;
1818+1919+ # Set your time zone.
2020+ time.timeZone = "America/Chicago";
2121+2222+ # Select internationalisation properties.
2323+ i18n.defaultLocale = "en_US.UTF-8";
2424+ # console = {
2525+ # font = "Lat2-Terminus16";
2626+ # keyMap = "us";
2727+ # useXkbConfig = true; # use xkb.options in tty.
2828+ # };
2929+3030+ # Automatic doc cache generation
3131+ documentation.man.generateCaches = true;
3232+3333+ # Automatic system upgrades
3434+ system.autoUpgrade = {
3535+ enable = true;
3636+ dates = "09:00";
3737+ randomizedDelaySec = "45min";
3838+ };
3939+4040+ # Automatic Garbage Collection
4141+ nix.gc.automatic = true;
4242+ nix.gc.options = "--delete-older-than 8d";
4343+4444+ # This option defines the first version of NixOS you have installed on this particular machine,
4545+ # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
4646+ #
4747+ # Most users should NEVER change this value after the initial install, for any reason,
4848+ # even if you've upgraded your system to a new NixOS release.
4949+ #
5050+ # This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
5151+ # so changing it will NOT upgrade your system.
5252+ #
5353+ # This value being lower than the current NixOS release does NOT mean your system is
5454+ # out of date, out of support, or vulnerable.
5555+ #
5656+ # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
5757+ # and migrated your data accordingly.
5858+ #
5959+ # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
6060+ system.stateVersion = "23.11"; # Did you read the comment?
6161+6262+}
···11+{ pkgs, lib, ... }:
22+let # bash script to let dbus know about important env variables and
33+ # propagate them to relevent services run at the end of sway config
44+ # see
55+ # https://github.com/emersion/xdg-desktop-portal-wlr/wiki/"It-doesn't-work"-Troubleshooting-Checklist
66+ # note: this is pretty much the same as /etc/sway/config.d/nixos.conf but also restarts
77+ # some user services to make sure they have the correct environment variables
88+ dbus-sway-environment = pkgs.writeTextFile {
99+ name = "dbus-sway-environment";
1010+ destination = "/bin/dbus-sway-environment";
1111+ executable = true;
1212+1313+ text = ''
1414+ dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
1515+ systemctl --user stop pipewire pipewire-media-session xdg-desktop-portal xdg-desktop-portal-wlr
1616+ systemctl --user start pipewire pipewire-media-session xdg-desktop-portal xdg-desktop-portal-wlr
1717+ '';
1818+ };
1919+2020+ # currently, there is some friction between sway and gtk:
2121+ # https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland
2222+ # the suggested way to set gtk settings is with gsettings
2323+ # for gsettings to work, we need to tell it where the schemas are
2424+ # using the XDG_DATA_DIR environment variable
2525+ # run at the end of sway config
2626+ configure-gtk = pkgs.writeTextFile {
2727+ name = "configure-gtk";
2828+ destination = "/bin/configure-gtk";
2929+ executable = true;
3030+ text =
3131+ let
3232+ # TODO: figure out why these bindings exist or where they're used
3333+ schema = pkgs.gsettings-desktop-schemas;
3434+ datadir = "${schema}/share/gsettings-schemas/${schema.name}";
3535+ in
3636+ ''
3737+ 6 gnome_schema=org.gnome.desktop.interface
3838+ gsettings set $gnome_schema gtk-theme 'Dracula'
3939+ '';
4040+ };
4141+in
4242+{
4343+4444+ # List packages installed in system profile. To search, run:
4545+ # $ nix search wget
4646+ environment.systemPackages = with pkgs; [
4747+ mangohud
4848+ neovim
4949+ appimage-run
5050+ tzdata
5151+ wget
5252+ kitty
5353+ file
5454+ w3m
5555+ fishPlugins.fzf-fish
5656+ fzf
5757+ qemu
5858+ qemu-user
5959+ qemu-utils
6060+ qemu_full
6161+ OVMF
6262+ #9p stuff
6363+ diod
6464+ plan9port
6565+ vis
6666+ rc
6767+6868+ smartmontools
6969+7070+ # Sway stuff
7171+ wdisplays
7272+ mako
7373+ bemenu
7474+ wl-clipboard
7575+ slurp
7676+ grim
7777+ swayidle
7878+ swaylock
7979+ adwaita-icon-theme
8080+ dracula-theme
8181+ glib
8282+ xdg-utils
8383+ xdg-desktop-portal
8484+ wayland
8585+ configure-gtk
8686+ lxqt.lxqt-menu-data # for lxqt
8787+ dbus-sway-environment
8888+ dbus
8989+ pkg-config
9090+ zlib
9191+ # why wouldn't I want documentation on my system
9292+ man-pages
9393+ man-pages-posix
9494+ linuxPackages_latest.perf
9595+ ];
9696+9797+ environment.loginShellInit = ''
9898+ [[ "$(tty)" = "/dev/tty1" ]] && /home/noah/repos/nixos/gs.sh
9999+ '';
100100+101101+ documentation.dev.enable = true;
102102+103103+ # Fix dynamically linked libraries for unpackaged binaries
104104+ programs.nix-ld = {
105105+ enable = true;
106106+ libraries = with pkgs; [
107107+ # Add missing dynamic libraries for unpackaged programs HERE
108108+ # NOT in environment.systemPackages
109109+ zlib
110110+ openssl
111111+ sqlite
112112+ libunwind
113113+ libglvnd
114114+ libclang
115115+ systemdLibs
116116+ ];
117117+ };
118118+ programs.nix-index = {
119119+ enable = true;
120120+ enableFishIntegration = true;
121121+ enableBashIntegration = false;
122122+ enableZshIntegration = false;
123123+ };
124124+125125+ programs.steam = {
126126+ enable = true;
127127+ remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
128128+ dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
129129+ localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
130130+ gamescopeSession.enable = true;
131131+ };
132132+ programs.gamescope = {
133133+ enable = true;
134134+ capSysNice = true;
135135+ };
136136+ # Boot to bigpicture
137137+ services.getty.autologinUser = "noah";
138138+139139+ programs.appimage = {
140140+ enable = true;
141141+ binfmt = true;
142142+ };
143143+144144+ # Run other bins in QEMU
145145+ boot.binfmt.emulatedSystems = [
146146+ "aarch64-linux"
147147+ "riscv64-linux"
148148+ ];
149149+ # UEFI firmware support for QEMU
150150+ systemd.tmpfiles.rules = [ "L+ /var/lib/qemu/firmware - - - - ${pkgs.qemu}/share/qemu/firmware" ];
151151+152152+ # Logseq uses an ancient version of Electron, so we enable that
153153+ nixpkgs.config.permittedInsecurePackages = [ "electron-25.9.0" ];
154154+155155+ # I don't care too much about unfree
156156+ nixpkgs.config.allowUnfree = true;
157157+ # Whitelist some unfree packages
158158+ nixpkgs.config.allowUnfreePredicate =
159159+ pkg:
160160+ builtins.elem (lib.getName pkg) [
161161+ "discord"
162162+ "spotify"
163163+ "obsidian"
164164+ "unstable.obsidian"
165165+ "tailscale"
166166+ "google-chrome"
167167+ "slack"
168168+ "steam"
169169+ "steam-original"
170170+ "steam-unwrapped"
171171+ "steam-run"
172172+ ];
173173+}
+44
host-specific/shizuri/services.nix
···11+{ pkgs, ... }:
22+{
33+ # Some programs need SUID wrappers, can be configured further or are
44+ # started in user sessions.
55+ # programs.mtr.enable = true;
66+ programs.gnupg.agent = {
77+ enable = true;
88+ enableSSHSupport = false;
99+ };
1010+1111+ # Enable the OpenSSH daemon.
1212+ services.openssh = {
1313+ enable = true;
1414+ settings.X11Forwarding = true;
1515+ };
1616+1717+ # Smart Card daemon
1818+ services.pcscd.enable = true;
1919+2020+ # This option is for enabling the bolt daemon for managing Thunderbolt/USB4 Devices.
2121+ services.hardware.bolt.enable = true;
2222+2323+ services.fwupd.enable = true;
2424+2525+ services.xrdp = {
2626+ enable = true;
2727+ openFirewall = true;
2828+ defaultWindowManager = "${pkgs.lxqt.lxqt-session}/bin/lxqt-session";
2929+ };
3030+3131+ # Containers and VMs
3232+ virtualisation = {
3333+ podman = {
3434+ enable = false;
3535+ dockerCompat = true;
3636+ defaultNetwork.settings.dns_enabled = true;
3737+ dockerSocket.enable = true;
3838+ };
3939+ docker = {
4040+ enable = true;
4141+ storageDriver = "overlay2";
4242+ };
4343+ };
4444+}
+55
host-specific/touma-wsl.nix
···11+# Edit this configuration file to define what should be installed on
22+# your system. Help is available in the configuration.nix(5) man page, on
33+# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
44+55+# NixOS-WSL specific options are documented on the NixOS-WSL repository:
66+# https://github.com/nix-community/NixOS-WSL
77+88+{ pkgs, inputs, ... }:
99+{
1010+ imports = [
1111+ # WSL has no hardware configuration
1212+ ../users.nix
1313+ ../services.nix
1414+ ];
1515+ wsl = {
1616+ enable = true;
1717+ defaultUser = "noah";
1818+ wslConf.network.hostname = "touma-wsl-nixos";
1919+ };
2020+ # List packages installed in system profile. To search, run:
2121+ # $ nix search wget
2222+ environment.systemPackages = with pkgs; [
2323+ neovim
2424+ appimage-run
2525+ wget
2626+ kitty
2727+ w3m
2828+ fishPlugins.fzf-fish
2929+ fzf
3030+ qemu
3131+ OVMF
3232+ gitFull
3333+ # plan9
3434+ diod
3535+ plan9port
3636+ vis
3737+ rc
3838+3939+ xdg-utils
4040+ inputs.agenix.packages."${system}".agenix
4141+ ];
4242+ services.openssh.enable = true;
4343+4444+ # Fix dynamically linked libraries for unpackaged binaries
4545+ programs.nix-ld = {
4646+ enable = true;
4747+ libraries = with pkgs; [
4848+ # Add missing dynamic libraries for unpackaged programs HERE
4949+ # NOT in environment.systemPackages
5050+ zlib
5151+ fuse3
5252+ ];
5353+ };
5454+ system.stateVersion = "24.11";
5555+}
+196
i3/config
···11+# This file has been auto-generated by i3-config-wizard(1).
22+# It will not be overwritten, so edit it as you like.
33+#
44+# Should you change your keyboard layout some time, delete
55+# this file and re-run i3-config-wizard(1).
66+#
77+88+# i3 config file (v4)
99+#
1010+# Please see https://i3wm.org/docs/userguide.html for a complete reference!
1111+1212+set $mod Mod4
1313+1414+# Font for window titles. Will also be used by the bar unless a different font
1515+# is used in the bar {} block below.
1616+font pango:monospace 8
1717+1818+# This font is widely installed, provides lots of unicode glyphs, right-to-left
1919+# text rendering and scalability on retina/hidpi displays (thanks to pango).
2020+#font pango:DejaVu Sans Mono 8
2121+2222+# Start XDG autostart .desktop files using dex. See also
2323+# https://wiki.archlinux.org/index.php/XDG_Autostart
2424+exec --no-startup-id dex --autostart --environment i3
2525+2626+# The combination of xss-lock, nm-applet and pactl is a popular choice, so
2727+# they are included here as an example. Modify as you see fit.
2828+2929+# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
3030+# screen before suspend. Use loginctl lock-session to lock your screen.
3131+exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
3232+3333+# NetworkManager is the most popular way to manage wireless networks on Linux,
3434+# and nm-applet is a desktop environment-independent system tray GUI for it.
3535+exec --no-startup-id nm-applet
3636+3737+# Use pactl to adjust volume in PulseAudio.
3838+set $refresh_i3status killall -SIGUSR1 i3status
3939+bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
4040+bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
4141+bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
4242+bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
4343+4444+# Use Mouse+$mod to drag floating windows to their wanted position
4545+floating_modifier $mod
4646+4747+# move tiling windows via drag & drop by left-clicking into the title bar,
4848+# or left-clicking anywhere into the window while holding the floating modifier.
4949+tiling_drag modifier titlebar
5050+5151+# start a terminal
5252+bindsym $mod+Return exec kitty
5353+5454+# kill focused window
5555+bindsym $mod+Shift+q kill
5656+5757+# start dmenu (a program launcher)
5858+bindsym $mod+d exec --no-startup-id dmenu_run
5959+# A more modern dmenu replacement is rofi:
6060+# bindcode $mod+40 exec "rofi -modi drun,run -show drun"
6161+# There also is i3-dmenu-desktop which only displays applications shipping a
6262+# .desktop file. It is a wrapper around dmenu, so you need that installed.
6363+# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop
6464+6565+# change focus
6666+bindsym $mod+h focus left
6767+bindsym $mod+j focus down
6868+bindsym $mod+k focus up
6969+bindsym $mod+l focus right
7070+7171+7272+# alternatively, you can use the cursor keys:
7373+bindsym $mod+Left focus left
7474+bindsym $mod+Down focus down
7575+bindsym $mod+Up focus up
7676+bindsym $mod+Right focus right
7777+7878+# move focused window
7979+bindsym $mod+Shift+h move left
8080+bindsym $mod+Shift+j move down
8181+bindsym $mod+Shift+k move up
8282+bindsym $mod+Shift+l move right
8383+8484+# alternatively, you can use the cursor keys:
8585+bindsym $mod+Shift+Left move left
8686+bindsym $mod+Shift+Down move down
8787+bindsym $mod+Shift+Up move up
8888+bindsym $mod+Shift+Right move right
8989+9090+# split in horizontal orientation
9191+bindsym $mod+g split h
9292+9393+# split in vertical orientation
9494+bindsym $mod+v split v
9595+9696+# enter fullscreen mode for the focused container
9797+bindsym $mod+f fullscreen toggle
9898+9999+# change container layout (stacked, tabbed, toggle split)
100100+bindsym $mod+s layout stacking
101101+bindsym $mod+w layout tabbed
102102+bindsym $mod+e layout toggle split
103103+104104+# toggle tiling / floating
105105+bindsym $mod+Shift+space floating toggle
106106+107107+# change focus between tiling / floating windows
108108+bindsym $mod+space focus mode_toggle
109109+110110+# focus the parent container
111111+bindsym $mod+a focus parent
112112+113113+# focus the child container
114114+#bindsym $mod+d focus child
115115+116116+# Define names for default workspaces for which we configure key bindings later on.
117117+# We use variables to avoid repeating the names in multiple places.
118118+set $ws1 "1"
119119+set $ws2 "2"
120120+set $ws3 "3"
121121+set $ws4 "4"
122122+set $ws5 "5"
123123+set $ws6 "6"
124124+set $ws7 "7"
125125+set $ws8 "8"
126126+set $ws9 "9"
127127+set $ws10 "10"
128128+129129+# switch to workspace
130130+bindsym $mod+1 workspace number $ws1
131131+bindsym $mod+2 workspace number $ws2
132132+bindsym $mod+3 workspace number $ws3
133133+bindsym $mod+4 workspace number $ws4
134134+bindsym $mod+5 workspace number $ws5
135135+bindsym $mod+6 workspace number $ws6
136136+bindsym $mod+7 workspace number $ws7
137137+bindsym $mod+8 workspace number $ws8
138138+bindsym $mod+9 workspace number $ws9
139139+bindsym $mod+0 workspace number $ws10
140140+# Tab navigation
141141+bindsym $mod+Tab workspace next
142142+bindsym $mod+Shift+Tab workspace prev
143143+144144+# move focused container to workspace
145145+bindsym $mod+Shift+1 move container to workspace number $ws1
146146+bindsym $mod+Shift+2 move container to workspace number $ws2
147147+bindsym $mod+Shift+3 move container to workspace number $ws3
148148+bindsym $mod+Shift+4 move container to workspace number $ws4
149149+bindsym $mod+Shift+5 move container to workspace number $ws5
150150+bindsym $mod+Shift+6 move container to workspace number $ws6
151151+bindsym $mod+Shift+7 move container to workspace number $ws7
152152+bindsym $mod+Shift+8 move container to workspace number $ws8
153153+bindsym $mod+Shift+9 move container to workspace number $ws9
154154+bindsym $mod+Shift+0 move container to workspace number $ws10
155155+156156+# reload the configuration file
157157+bindsym $mod+Shift+c reload
158158+# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
159159+bindsym $mod+Shift+r restart
160160+# exit i3 (logs you out of your X session)
161161+bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
162162+163163+# resize window (you can also use the mouse for that)
164164+mode "resize" {
165165+ # These bindings trigger as soon as you enter the resize mode
166166+167167+ # Pressing left will shrink the window’s width.
168168+ # Pressing right will grow the window’s width.
169169+ # Pressing up will shrink the window’s height.
170170+ # Pressing down will grow the window’s height.
171171+ bindsym h resize shrink width 10 px or 10 ppt
172172+ bindsym j resize grow height 10 px or 10 ppt
173173+ bindsym k resize shrink height 10 px or 10 ppt
174174+ bindsym l resize grow width 10 px or 10 ppt
175175+176176+ # same bindings, but for the arrow keys
177177+ bindsym Left resize shrink width 10 px or 10 ppt
178178+ bindsym Down resize grow height 10 px or 10 ppt
179179+ bindsym Up resize shrink height 10 px or 10 ppt
180180+ bindsym Right resize grow width 10 px or 10 ppt
181181+182182+ # back to normal: Enter or Escape or $mod+r
183183+ bindsym Return mode "default"
184184+ bindsym Escape mode "default"
185185+ bindsym $mod+r mode "default"
186186+}
187187+188188+bindsym $mod+r mode "resize"
189189+190190+# Start i3bar to display a workspace bar (plus the system information i3status
191191+# finds out, if available)
192192+bar {
193193+ status_command i3status
194194+}
195195+196196+exec barrier