{
  config,
  lib,
  machine,
  pkgs,
  ...
}: let
  background-path = ".config/sway/background.png";
  sway_config = builtins.toFile "sway_config" ''
    set $mod Mod4
    set $left h
    set $down j
    set $up k
    set $right l
    set $term alacritty
    set $menu wmenu-run
    set $screenshot grim -g "$(slurp)"
    floating_modifier $mod normal

    workspace_layout stacking
    output * bg ${config.home.homeDirectory}/${background-path} fill

    # launch programs
    bindsym $mod+Shift+Return exec $term
    bindsym $mod+Shift+d exec $menu
    bindsym $mod+Shift+a exec anki
    bindsym $mod+Shift+q exec librewolf
    bindsym $mod+Shift+s exec $screenshot

    bindsym $mod+Shift+c kill

    bindsym $mod+Shift+r reload

    bindsym $mod+Shift+Alt+q exit

    bindsym $mod+$left focus left
    bindsym $mod+$down focus down
    bindsym $mod+$up focus up
    bindsym $mod+$right focus right

    bindsym $mod+Shift+$left move left
    bindsym $mod+Shift+$down move down
    bindsym $mod+Shift+$up move up
    bindsym $mod+Shift+$right move right

    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 0

    bindsym $mod+Shift+1 move container to workspace number 1
    bindsym $mod+Shift+2 move container to workspace number 2
    bindsym $mod+Shift+3 move container to workspace number 3
    bindsym $mod+Shift+4 move container to workspace number 4
    bindsym $mod+Shift+5 move container to workspace number 5
    bindsym $mod+Shift+6 move container to workspace number 6
    bindsym $mod+Shift+7 move container to workspace number 7
    bindsym $mod+Shift+8 move container to workspace number 8
    bindsym $mod+Shift+9 move container to workspace number 9
    bindsym $mod+Shift+0 move container to workspace number 0

    bindsym $mod+f fullscreen
    bindsym $mod+Shift+space floating toggle
    bindsym $mod+Shift+minus move scratchpad
    bindsym $mod+minus scratchpad show

    bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle
    bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5%
    bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5%
    bindsym --locked XF86AudioMicMute exec pact set-source-mute \@DEFAULT_SOURCE@ toggle
    bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%-
    bindsym --locked XF86MonbrightnessUp exec brightnessctl set 5%+

    default_border none
    font pango:monospace 0.001
    titlebar_border_thickness 0
    titlebar_padding 0
  '';
in {
  imports = [./stylix.nix];
  xdg.configFile."shell".source = lib.getExe pkgs.brush;
  xdg.configFile."sway/config".source = lib.mkForce sway_config;
  #  xdg.configFile.${background-path}.source = ./nix-wallpaper-gear.png;
  wayland.windowManager.sway.enable = true;
  home = {
    username = "andromeda";
    homeDirectory = "/home/${config.home.username}";
    stateVersion = "26.05";
    packages = [
      pkgs.acpi
      pkgs.alacritty
      pkgs.anki
      pkgs.brightnessctl
      pkgs.brush
      pkgs.dust
      pkgs.fluffychat
      pkgs.fzf
      pkgs.glow
      pkgs.grim
      pkgs.jmtpfs
      pkgs.nix-output-monitor
      pkgs.ranger
      pkgs.rip2
      pkgs.ripgrep
      pkgs.slurp
      pkgs.tree
      pkgs.zoxide
    ];
    file.${background-path}.source = ./nix-wallpaper-gear.png;
  };
  programs = {
    alacritty.enable = true;
    bash = {
      enable = true;
      shellAliases = {
        neofetch = "fastfetch";
        ls = lib.mkForce "lsd";
        ll = lib.mkForce "lsd -l";
        l = "lsd -la";
        cd = "z";
        gg = "git log --oneline --abbrev-commit --all --graph --decorate --color";
        md = "glow";
      };
      bashrcExtra = ''
        PS1="\u@\h:\w$"
        eval "$(zoxide init bash)"
      '';
    };
    btop = {
      enable = true;
      settings = {
        theme_background = false;
        vim_keys = true;
        rounded_corners = false;
        graph_symbol = "braille";
        update_ms = 150;
        proc_sorting = "cpu lazy";
        proc_gradient = false;
        proc_left = true;
        cpu_single_graph = true;
        cpu_bottom = true;
        clock_format = "/user@/host:/uptime@%H:%M";
        background_update = true;
        mem_graphs = false;
        mem_below_net = true;
        show_swap = false;
        only_physical = true;
        show_io_stat = true;
        io_mode = false;
        io_graph_combined = false;
      };
    };
    fastfetch.enable = true;
    git = {
      enable = true;
      settings = {
        user = {
          name = config.home.username;
          email = "${config.home.username}@${machine.hostname}";
        };
        init.defaultBranch = "master";
        http.postBuffer = 524288000;
      };
    };
    gh.enable = true;
    home-manager.enable = true;
    librewolf = {
      enable = true;
      package = pkgs.librewolf.override {
        cfg.enableTridactylNative = true;
      };
      profiles.${config.home.username}.extensions.packages = [
        pkgs.nur.repos.rycee.firefox-addons.tridactyl
      ];
    };
    lsd.enable = true;
    nvf = {
      enable = true;
      settings.vim = {
        autocomplete.nvim-cmp.enable = false;
        formatter.conform-nvim = {
          enable = true;
          setupOpts.format_on_save = {
            lsp_format = "fallback";
            timeout_ms = 5000;
          };
        };
        lsp.otter-nvim.enable = true;
        git.enable = true;
        keymaps = [
          {
            key = "<Down>";
            mode = ["i" "n" "v" "c"];
            action = "<NOP>";
          }
          {
            key = "<Up>";
            mode = ["i" "n" "v" "c"];
            action = "<NOP>";
          }
          {
            key = "<Left>";
            mode = ["i" "n" "v" "c"];
            action = "<NOP>";
          }
          {
            key = "<Right>";
            mode = ["i" "n" "v" "c"];
            action = "<NOP>";
          }
          {
            key = "jj";
            mode = ["i"];
            action = "<Esc>";
          }
          {
            key = "kk";
            mode = ["i"];
            action = "<Esc>";
          }
          {
            key = "jk";
            mode = ["i"];
            action = "<Esc>";
          }
          {
            key = "kj";
            mode = ["i"];
            action = "<Esc>";
          }
          {
            key = "<Esc>";
            mode = ["i"];
            action = "<Nop>";
          }
        ];
        languages = {
          nix = {
            enable = true;
            format.enable = true;
            lsp.enable = true;
          };
          haskell = {
            enable = true;
            lsp.enable = true;
          };
        };
        lineNumberMode = "relative";
        options = {
          tabstop = 2;
          shiftwidth = 2;
          expandtab = true;
          smarttab = true;
          foldmethod = "indent";
          number = true;
          colorcolumn = "80";
        };
        statusline.lualine.enable = true;
        syntaxHighlighting = true;
      };
    };
    ssh.enable = true;
  };
}
