summaryrefslogtreecommitdiff
path: root/hm
diff options
context:
space:
mode:
authoradikro <adikro@disroot.org>2025-12-20 03:14:45 +0100
committeradikro <adikro@disroot.org>2025-12-20 03:14:45 +0100
commit791bc419b6dac7c70951981ef6b34cdf85828470 (patch)
tree56d0962fdf829ae942feb1344763e54dbc3c89a3 /hm
parente60410393cea222b16743a1a87f29c06b9b3543b (diff)
absolutely massive rewrite, made (almost) everything modular with changes to come
Diffstat (limited to 'hm')
-rw-r--r--hm/conf/clip.nix32
-rw-r--r--hm/conf/conf.nix9
-rw-r--r--hm/conf/git.nix18
-rw-r--r--hm/conf/ssh.nix11
-rw-r--r--hm/conf/xdg-dirs.nix51
-rw-r--r--hm/default.nix10
-rw-r--r--hm/editors/editors.nix8
-rw-r--r--hm/editors/helix.nix14
-rw-r--r--hm/editors/nixvim.nix107
-rw-r--r--hm/editors/nvf.nix48
-rw-r--r--hm/env/env.nix9
-rw-r--r--hm/env/niri/binds.nix98
-rw-r--r--hm/env/niri/niri.nix94
-rw-r--r--hm/env/theme.nix35
-rw-r--r--hm/env/waybar.nix13
-rw-r--r--hm/shell/cli.nix35
-rw-r--r--hm/shell/fish.nix69
-rw-r--r--hm/shell/foot.nix38
-rw-r--r--hm/shell/shell.nix9
-rw-r--r--hm/shell/starship.nix49
-rw-r--r--hm/soft/awww.nix14
-rw-r--r--hm/soft/easyeffects.nix13
-rw-r--r--hm/soft/fuzzel.nix13
-rw-r--r--hm/soft/gaming.nix12
-rw-r--r--hm/soft/media.nix27
-rw-r--r--hm/soft/nixcord.nix130
-rw-r--r--hm/soft/satty.nix13
-rw-r--r--hm/soft/soft.nix15
-rw-r--r--hm/soft/spicetify.nix24
-rw-r--r--hm/soft/swayidle.nix13
-rw-r--r--hm/soft/swaylock.nix14
31 files changed, 1045 insertions, 0 deletions
diff --git a/hm/conf/clip.nix b/hm/conf/clip.nix
new file mode 100644
index 0000000..82de671
--- /dev/null
+++ b/hm/conf/clip.nix
@@ -0,0 +1,32 @@
+{ config, lib, pkgs, ... }:
+let
+ cfg = config.szpont.hm.conf.clipboard;
+in
+{
+ options.szpont.hm.conf.clipboard = {
+ enable = lib.mkEnableOption "cliphist clipboard history";
+
+ backend = lib.mkOption {
+ type = lib.types.enum [ "wayland" "x11" "both" ];
+ default = "both";
+ description = "which clipboard backend tools to install";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ services.cliphist = {
+ enable = true;
+ allowImages = true;
+ systemdTargets = "graphical-session.target";
+ };
+
+ home.packages = lib.mkMerge [
+ (lib.mkIf (cfg.backend == "wayland" || cfg.backend == "both") [
+ pkgs.wl-clipboard
+ ])
+ (lib.mkIf (cfg.backend == "x11" || cfg.backend == "both") [
+ pkgs.xclip
+ ])
+ ];
+ };
+}
diff --git a/hm/conf/conf.nix b/hm/conf/conf.nix
new file mode 100644
index 0000000..c05c5c3
--- /dev/null
+++ b/hm/conf/conf.nix
@@ -0,0 +1,9 @@
+{ ... }:
+{
+ imports = [
+ ./clip.nix
+ ./git.nix
+ ./ssh.nix
+ ./xdg-dirs.nix
+ ];
+}
diff --git a/hm/conf/git.nix b/hm/conf/git.nix
new file mode 100644
index 0000000..f6a7267
--- /dev/null
+++ b/hm/conf/git.nix
@@ -0,0 +1,18 @@
+{ config, lib, ... }:
+let
+ cfg = config.szpont.hm.conf.git;
+in
+{
+ options.szpont.hm.conf.git.enable = lib.mkEnableOption "enables git vcs";
+
+ config = lib.mkIf cfg.enable {
+ programs.git = {
+ enable = true;
+ settings = {
+ user.name = "adikro";
+ user.email = "adikro@disroot.org";
+ init.defaultBranch = "main";
+ };
+ };
+ };
+}
diff --git a/hm/conf/ssh.nix b/hm/conf/ssh.nix
new file mode 100644
index 0000000..4587751
--- /dev/null
+++ b/hm/conf/ssh.nix
@@ -0,0 +1,11 @@
+{ config, lib, ... }:
+let
+ cfg = config.szpont.hm.conf.ssh;
+in
+{
+ options.szpont.hm.conf.ssh.enable = lib.mkEnableOption "enables ssh support";
+
+ config = lib.mkIf cfg.enable {
+
+ };
+}
diff --git a/hm/conf/xdg-dirs.nix b/hm/conf/xdg-dirs.nix
new file mode 100644
index 0000000..2bd9e64
--- /dev/null
+++ b/hm/conf/xdg-dirs.nix
@@ -0,0 +1,51 @@
+{ config, lib, ... }:
+let
+ cfg = config.szpont.hm.conf.xdg-dirs;
+in
+{
+ options.szpont.hm.conf.xdg-dirs = {
+ enable = lib.mkEnableOption "enables xdg dirs";
+
+ mediaPath = lib.mkOption {
+ type = lib.types.path;
+ default = config.home.homeDirectory;
+ description = "base path for media";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ xdg.userDirs = {
+ enable = true;
+ createDirectories = true;
+
+ download = "${config.home.homeDirectory}/dl";
+ documents = "${config.home.homeDirectory}/docs";
+
+ pictures = "${toString cfg.mediaPath}/pics";
+ videos = "${toString cfg.mediaPath}/vids";
+
+ desktop = null;
+ music = null;
+ publicShare = null;
+ templates = null;
+
+ extraConfig = {
+ XDG_PROJECTS_DIR = "${config.home.homeDirectory}/proj";
+ XDG_GAMES_DIR = "${config.home.homeDirectory}/games";
+ XDG_MEDIA_DIR = "${toString cfg.mediaPath}";
+ XDG_SS_DIR = "${toString cfg.mediaPath}/pics/ss";
+ XDG_CLIPS_DIR = "${toString cfg.mediaPath}/vids/clips";
+ XDG_ARCHIVE_DIR = "${toString cfg.mediaPath}/archive";
+ };
+ };
+ home.sessionVariables = {
+ XDG_PROJECTS_DIR = "${config.home.homeDirectory}/proj";
+ XDG_GAMES_DIR = "${config.home.homeDirectory}/games";
+ XDG_MEDIA_DIR = "${toString cfg.mediaPath}";
+ XDG_SS_DIR = "${toString cfg.mediaPath}/pics/ss";
+ XDG_CLIPS_DIR = "${toString cfg.mediaPath}/vids/clips";
+ XDG_ARCHIVE_DIR = "${toString cfg.mediaPath}/archive";
+ };
+
+ };
+}
diff --git a/hm/default.nix b/hm/default.nix
new file mode 100644
index 0000000..a8babd7
--- /dev/null
+++ b/hm/default.nix
@@ -0,0 +1,10 @@
+{ ... }:
+{
+ imports = [
+ ./soft/soft.nix
+ ./conf/conf.nix
+ ./env/env.nix
+ ./editors/editors.nix
+ ./shell/shell.nix
+ ];
+}
diff --git a/hm/editors/editors.nix b/hm/editors/editors.nix
new file mode 100644
index 0000000..bca92dd
--- /dev/null
+++ b/hm/editors/editors.nix
@@ -0,0 +1,8 @@
+{ ... }:
+{
+ imports = [
+ ./helix.nix
+ ./nixvim.nix
+ # ./nvf.nix
+ ];
+}
diff --git a/hm/editors/helix.nix b/hm/editors/helix.nix
new file mode 100644
index 0000000..05412a8
--- /dev/null
+++ b/hm/editors/helix.nix
@@ -0,0 +1,14 @@
+{ config, lib, pkgs, ... }:
+let
+ cfg = config.szpont.hm.editors.helix;
+in
+{
+ options.szpont.hm.editors.helix.enable = lib.mkEnableOption "enables helix editor";
+
+ config = lib.mkIf cfg.enable {
+ programs.helix = {
+ enable = true;
+ package = pkgs.helix;
+ };
+ };
+}
diff --git a/hm/editors/nixvim.nix b/hm/editors/nixvim.nix
new file mode 100644
index 0000000..a80a674
--- /dev/null
+++ b/hm/editors/nixvim.nix
@@ -0,0 +1,107 @@
+{ inputs, config, lib, pkgs, ... }:
+let
+ cfg = config.szpont.hm.editors.nixvim;
+in
+{
+ imports = [ inputs.nixvim.homeModules.nixvim ];
+
+ options.szpont.hm.editors.nixvim.enable = lib.mkEnableOption "enables nixvim config framework";
+
+ config = lib.mkIf cfg.enable {
+
+ programs.nixvim = {
+ enable = true;
+ package = inputs.neovim-nightly-overlay.packages.${pkgs.stdenv.hostPlatform.system}.default;
+
+ viAlias = true;
+ vimAlias = true;
+ defaultEditor = true;
+ waylandSupport = true;
+ colorschemes.gruvbox.enable = true;
+
+ plugins = {
+ lualine.enable = true;
+ oil.enable = true;
+ lazygit.enable = true;
+ persistence.enable = true;
+ nvim-autopairs.enable = true;
+ neoscroll.enable = true;
+ bufferline.enable = true;
+ web-devicons.enable = true;
+
+ treesitter = {
+ enable = true;
+ settings = {
+ indent.enable = true;
+ };
+ };
+
+ telescope = {
+ enable = true;
+ extensions = {
+ fzf-native = {
+ enable = true;
+ };
+ };
+ };
+
+ notify = {
+ enable = true;
+ settings = {
+ backgroundColour = "#1e1e2e";
+ fps = 60;
+ render = "default";
+ timeout = 500;
+ topDown = true;
+ };
+ };
+
+ hardtime = {
+ # enable = true;
+ settings = {
+ # disableMouse = true;
+ # enabled = false;
+ restrictionMode = "hint";
+ hint = true;
+ maxCount = 40;
+ maxTime = 1000;
+ };
+ };
+
+ nix.enable = true;
+ lsp = {
+ enable = true;
+ servers = {
+ nil_ls.enable = true;
+ clangd.enable = true;
+ };
+ };
+ };
+
+ opts = {
+ number = true;
+ relativenumber = true;
+ termguicolors = true;
+ # mouse = "a";
+ ignorecase = true;
+ smartcase = true;
+ expandtab = true;
+ shiftwidth = 2;
+ encoding = "utf-8";
+ fileencoding = "utf-8";
+ undofile = true;
+ swapfile = true;
+ backup = false;
+ autoread = true;
+ cursorline = true;
+ ruler = true;
+ gdefault = true;
+ scrolloff = 5;
+ clipboard = {
+ providers.wl-copy.enable = true;
+ register = "unnamedplus";
+ };
+ };
+ };
+ };
+}
diff --git a/hm/editors/nvf.nix b/hm/editors/nvf.nix
new file mode 100644
index 0000000..91348a9
--- /dev/null
+++ b/hm/editors/nvf.nix
@@ -0,0 +1,48 @@
+{ inputs, config, lib, pkgs, ... }:
+let
+ cfg = config.szpont.hm.editors.nvf;
+in
+{
+ options.szpont.hm.editors.nvf.enable = lib.mkEnableOption "enables nvf configuration framework";
+
+ config = lib.mkIf cfg.enable {
+ programs.nvf = {
+ enable = true;
+
+ settings.vim = {
+ package = inputs.neovim-nightly-overlay.packages.${pkgs.stdenv.hostPlatform.system}.default;
+
+ viAlias = true;
+ vimAlias = true;
+
+ theme = {
+ enable = true;
+ name = "gruvbox";
+ style = "dark";
+ };
+
+ statusline = {
+ lualine = {
+ enable = true;
+ theme = "gruvbox-material";
+ };
+ };
+
+ autopairs.nvim-autopairs.enable = true;
+
+ lsp.enable = true;
+
+ languages = {
+ nix = {
+ enable = true;
+ format = {
+ enable = true;
+ type = "alejandra";
+ };
+ };
+ clang.enable = true;
+ };
+ };
+ };
+ };
+}
diff --git a/hm/env/env.nix b/hm/env/env.nix
new file mode 100644
index 0000000..1c2c6d2
--- /dev/null
+++ b/hm/env/env.nix
@@ -0,0 +1,9 @@
+{ ... }:
+{
+ imports = [
+ ./niri/niri.nix
+
+ ./theme.nix
+ ./waybar.nix
+ ];
+}
diff --git a/hm/env/niri/binds.nix b/hm/env/niri/binds.nix
new file mode 100644
index 0000000..cb0feca
--- /dev/null
+++ b/hm/env/niri/binds.nix
@@ -0,0 +1,98 @@
+{ config, lib, pkgs, ... }:
+
+with config.lib.niri.actions;
+let
+ playerctl = spawn "${pkgs.playerctl}/bin/playerctl";
+in
+{
+ "Mod+O" = {
+ action = toggle-overview;
+ repeat = false;
+ };
+ "Mod+Slash".action = show-hotkey-overlay;
+
+ # Audio
+ XF86AudioRaiseVolume.action = playerctl "volume" "0.02+";
+ XF86AudioLowerVolume.action = playerctl "volume" "0.02-";
+ XF86AudioMute.action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle";
+ XF86AudioMicMute.action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle";
+
+ # Media keys
+ XF86AudioPlay.action = playerctl "play-pause";
+ XF86AudioPrev.action = playerctl "previous";
+ XF86AudioNext.action = playerctl "next";
+
+ # Column sizing
+ "Mod+Minus".action = set-column-width "-10%";
+ "Mod+Equal".action = set-column-width "+10%";
+
+ # Finer height adjustments when in column with other windows.
+ "Mod+Shift+Minus".action = set-window-height "-10%";
+ "Mod+Shift+Equal".action = set-window-height "+10%";
+
+ # Misc
+ "Mod+Shift+V".action = toggle-window-floating;
+ "Mod+Shift+P".action = power-off-monitors;
+ "Mod+W".action = toggle-column-tabbed-display;
+
+ "Mod+S".action = spawn "sh" "-c"
+ ''
+ filename="/media/pics/ss/$(date +%Y-%m-%d_%H-%M-%S).png"
+ grim -g "$(slurp)" - | tee "$filename" | wl-copy
+ '';
+
+ "Mod+Shift+S".action = spawn "sh" "-c"
+ ''
+ filename="/media/pics/ss/$(date +%Y-%m-%d_%H-%M-%S).png"
+ grim -g "$(slurp)" "$filename"
+
+ edited="/media/pics/ss/$(date +%Y-%m-%d_%H-%M-%S)-edited.png"
+ satty --filename "$filename" --output-filename "$edited"
+ '';
+
+ "Mod+Shift+D".action = spawn "sh" "-c"
+ ''
+ cliphist list | fuzzel --dmenu | cliphist decode | wl-copy
+ '';
+
+ # --- System / General ---
+ "Mod+Return".action = spawn "foot";
+ "Mod+D".action = spawn "fuzzel";
+ "Mod+C".action = spawn "qalculate-gtk";
+ "Mod+BracketLeft".action = consume-or-expel-window-left;
+ "Mod+BracketRight".action = consume-or-expel-window-right;
+
+ "Mod+R".action = switch-preset-column-width;
+ "Mod+Shift+R".action = reset-window-height;
+ "Mod+F".action = maximize-column;
+ "Mod+Shift+F".action = fullscreen-window;
+
+ "Mod+Comma".action = consume-window-into-column;
+ "Mod+Period".action = expel-window-from-column;
+
+ "Mod+Shift+E".action = quit;
+
+ # --- Window Navigation (Focus) ---
+ "Mod+H".action = focus-column-left;
+ "Mod+L".action = focus-column-right;
+ "Mod+J".action = focus-workspace-down;
+ "Mod+K".action = focus-workspace-up;
+
+ # --- Window Management (Move) ---
+ "Mod+Shift+H".action = move-column-left;
+ "Mod+Shift+L".action = move-column-right;
+ "Mod+Shift+J".action = move-window-down-or-to-workspace-down;
+ "Mod+Shift+K".action = move-window-up-or-to-workspace-up;
+
+ # --- Window State ---
+ "Mod+Shift+Q".action = close-window;
+
+} // (
+ # --- Generated Workspace Binds (1-9) ---
+ builtins.listToAttrs (builtins.concatMap (i: let
+ strI = toString i;
+ in [
+ { name = "Mod+${strI}"; value.action = focus-workspace i; }
+ { name = "Mod+Shift+${strI}"; value.action.move-column-to-workspace = [ i ]; }
+ ]) (lib.range 1 9))
+)
diff --git a/hm/env/niri/niri.nix b/hm/env/niri/niri.nix
new file mode 100644
index 0000000..fddfcac
--- /dev/null
+++ b/hm/env/niri/niri.nix
@@ -0,0 +1,94 @@
+{ config, lib, pkgs, ... }:
+let
+ cfg = config.szpont.hm.env.niri;
+in
+{
+ options.szpont.hm.env.niri.enable = lib.mkEnableOption "niri hm";
+ config = lib.mkIf cfg.enable {
+
+ szpont.hm.soft = {
+ awww.enable = true;
+ fuzzel.enable = true;
+ satty.enable = true;
+ swayidle.enable = true;
+ swaylock.enable = true;
+ };
+
+ programs.niri.settings = {
+ binds = import ./binds.nix { inherit config lib pkgs; };
+
+ prefer-no-csd = true;
+ hotkey-overlay.skip-at-startup = true;
+ input = {
+ mouse = {
+ accel-profile = "flat";
+ accel-speed = -0.6;
+ middle-emulation = true;
+ scroll-factor = 1.5;
+ };
+ focus-follows-mouse = {
+ enable = true;
+ max-scroll-amount = "10%";
+ };
+ mod-key = "Alt";
+ keyboard = {
+ xkb.layout = "pl";
+ repeat-delay = 400;
+ repeat-rate = 60;
+ };
+ power-key-handling.enable = false;
+ };
+ outputs = {
+ "DP-1" = {
+ focus-at-startup = true;
+ # backdrop-color = "";
+ variable-refresh-rate = "on-demand";
+ mode = {
+ width = 2560;
+ height = 1440;
+ refresh = 239.998;
+ };
+ };
+ };
+ cursor = {
+ hide-when-typing = true;
+ size = 8;
+ # theme = "";
+ };
+ layout = {
+ border = {
+ width = 2;
+ # active = <decoration>;
+ };
+ focus-ring = {
+ width = 2;
+ # active = <decoration>;
+ };
+ preset-column-widths = [
+ { proportion = 1. / 3.; }
+ { proportion = 1. / 2.; }
+ { proportion = 2. / 3.; }
+ ];
+ preset-window-heights = [
+ { proportion = 1. / 3.; }
+ { proportion = 1. / 2.; }
+ { proportion = 2. / 3.; }
+ ];
+ default-column-width.proportion = 0.5;
+ tab-indicator = {
+ gaps-between-tabs = 3;
+ position = "top";
+ };
+ };
+ spawn-at-startup = [
+ { command = [ "${lib.getExe pkgs.xwayland-satellite}" ]; }
+ { command = [ "awww-daemon" ]; }
+ ];
+ };
+ home.packages = with pkgs; [
+ qalculate-gtk
+ grim
+ slurp
+ ];
+ };
+}
diff --git a/hm/env/theme.nix b/hm/env/theme.nix
new file mode 100644
index 0000000..54dd00b
--- /dev/null
+++ b/hm/env/theme.nix
@@ -0,0 +1,35 @@
+{ config, lib, pkgs, ... }:
+let
+ cfg = config.szpont.hm.env.themes;
+in
+{
+ options.szpont.hm.env.themes = {
+ enable = lib.mkEnableOption "enables global theming";
+ gtk.enable = lib.mkEnableOption "GTK theming";
+ qt.enable = lib.mkEnableOption "QT theming";
+ };
+
+ config = lib.mkIf cfg.enable (lib.mkMerge [
+ (lib.mkIf cfg.gtk.enable {
+ gtk = {
+ enable = true;
+ gtk3.extraConfig.gtk-application-prefer-dark-theme = 1;
+ gtk4.extraConfig.gtk-application-prefer-dark-theme = 1;
+
+ theme = {
+ name = "Adwaita-dark";
+ package = pkgs.gnome-themes-extra;
+ };
+ };
+ })
+
+ (lib.mkIf cfg.qt.enable {
+ qt = {
+ enable = true;
+ style.name = "adwaita-dark";
+ style.package = pkgs.adwaita-qt;
+ platformTheme.name = "adwaita";
+ };
+ })
+ ]);
+}
diff --git a/hm/env/waybar.nix b/hm/env/waybar.nix
new file mode 100644
index 0000000..84ccea9
--- /dev/null
+++ b/hm/env/waybar.nix
@@ -0,0 +1,13 @@
+{ config, lib, ... }:
+let
+ cfg = config.szpont.hm.env.waybar;
+in
+{
+ options.szpont.hm.env.waybar.enable = lib.mkEnableOption "enables waybar";
+
+ config = lib.mkIf cfg.enable {
+ programs.waybar = {
+ enable = true;
+ };
+ };
+}
diff --git a/hm/shell/cli.nix b/hm/shell/cli.nix
new file mode 100644
index 0000000..222b002
--- /dev/null
+++ b/hm/shell/cli.nix
@@ -0,0 +1,35 @@
+{ config, lib, pkgs, ... }:
+let
+ cfg = config.szpont.hm.shell.cli;
+in
+{
+ options.szpont.hm.shell.cli.enable = lib.mkEnableOption "modern cli tools";
+
+ config = lib.mkIf cfg.enable {
+ programs.zoxide.enable = true;
+ programs.zoxide.options = [ "--cmd cd" ];
+
+ programs.bat = {
+ enable = true;
+ config.theme = "gruvbox-dark";
+ };
+
+ programs.eza.enable = true;
+ programs.fzf.enable = true;
+ programs.fd.enable = true;
+ programs.ripgrep.enable = true;
+ programs.yazi.enable = true;
+
+ programs.btop.enable = true;
+ programs.fastfetch.enable = true;
+
+ home.packages = with pkgs; [
+ gdu
+ file
+ mediainfo
+ chafa
+ hexyl
+ procs
+ ];
+ };
+}
diff --git a/hm/shell/fish.nix b/hm/shell/fish.nix
new file mode 100644
index 0000000..644eadc
--- /dev/null
+++ b/hm/shell/fish.nix
@@ -0,0 +1,69 @@
+{ config, lib, pkgs, ... }:
+let
+ cfg = config.szpont.hm.shell.fish;
+in
+{
+ options.szpont.hm.shell.fish.enable = lib.mkEnableOption "enables fish shell";
+
+ config = lib.mkIf cfg.enable {
+ programs.fish = {
+ enable = true;
+
+ interactiveShellInit = ''
+ set fish_greeting
+ fastfetch
+ '';
+
+ shellAliases = {
+ nos = "nh os switch";
+ nob = "nh os boot";
+ nfu = "nix flake update";
+ ll = "ls -lah";
+ la = "ls -A";
+ md = "mkdir -p";
+ rmf = "rm -rf";
+ gl = "git log --oneline --graph --decorate";
+ untar = "tar -xzvf";
+ tarc = "tar -czvf";
+ ff = "fastfetch";
+ cat = "bat";
+ ls = "eza";
+ };
+
+ plugins = [
+ {
+ name = "transient-fish";
+ src = pkgs.fishPlugins.transient-fish.src;
+ }
+ {
+ name = "fishbang";
+ src = pkgs.fishPlugins.fishbang.src;
+ }
+ {
+ name = "puffer";
+ src = pkgs.fishPlugins.puffer.src;
+ }
+ {
+ name = "pisces";
+ src = pkgs.fishPlugins.pisces.src;
+ }
+ {
+ name = "fzf-fish";
+ src = pkgs.fishPlugins.fzf-fish.src;
+ }
+ {
+ name = "fish-you-should-use";
+ src = pkgs.fishPlugins.fish-you-should-use.src;
+ }
+ {
+ name = "colored-man-pages";
+ src = pkgs.fishPlugins.colored-man-pages.src;
+ }
+ {
+ name = "fifc";
+ src = pkgs.fishPlugins.fifc.src;
+ }
+ ];
+ };
+ };
+}
diff --git a/hm/shell/foot.nix b/hm/shell/foot.nix
new file mode 100644
index 0000000..9847399
--- /dev/null
+++ b/hm/shell/foot.nix
@@ -0,0 +1,38 @@
+{ pkgs, lib, config, ... }:
+let
+ cfg = config.szpont.hm.shell.foot;
+
+ footTheme = pkgs.fetchurl {
+ url = "https://codeberg.org/dnkl/foot/raw/branch/master/themes/gruvbox-dark";
+ sha256 = "sha256-ubvnLgDEPGvNrwQdZRNguftg2SF5qcO1iVK0Tb5ZveI=";
+ };
+in
+{
+ options.szpont.hm.shell.foot = {
+ enable = lib.mkEnableOption "foot terminal emulator";
+ fontSize = lib.mkOption {
+ type = lib.types.int;
+ default = 14;
+ description = "Font size for the foot terminal";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ programs.foot = {
+ enable = true;
+ settings = {
+ main = {
+ font = "JetBrainsMonoNFM-Regular:size=${toString cfg.fontSize}";
+ box-drawings-uses-font-glyphs = "yes";
+ include = "${footTheme}";
+ };
+ scrollback = {
+ lines = 10000;
+ };
+ mouse = {
+ hide-when-typing = "yes";
+ };
+ };
+ };
+ };
+}
diff --git a/hm/shell/shell.nix b/hm/shell/shell.nix
new file mode 100644
index 0000000..a1ca34d
--- /dev/null
+++ b/hm/shell/shell.nix
@@ -0,0 +1,9 @@
+{ ... }:
+{
+ imports = [
+ ./cli.nix
+ ./fish.nix
+ ./foot.nix
+ ./starship.nix
+ ];
+}
diff --git a/hm/shell/starship.nix b/hm/shell/starship.nix
new file mode 100644
index 0000000..4996bdc
--- /dev/null
+++ b/hm/shell/starship.nix
@@ -0,0 +1,49 @@
+{ config, lib, ... }:
+let
+ cfg = config.szpont.hm.shell.starship;
+in
+{
+ options.szpont.hm.shell.starship.enable = lib.mkEnableOption "Starship prompt";
+
+ config = lib.mkIf cfg.enable {
+ programs.starship = {
+ enable = true;
+ enableFishIntegration = true;
+
+ settings = {
+ add_newline = true;
+
+ # format = lib.concatStrings [
+ # "$hostname"
+ # "$directory"
+ # "$git_branch"
+ # "$git_status"
+ # "$nix_shell"
+ # "$python"
+ # "$rust"
+ # "$character"
+ # ];
+
+ directory = {
+ truncate_to_repo = false;
+ read_only = "";
+ };
+
+ hostname.format = "[$hostname ]($style) ";
+
+ python = { symbol = ""; format = "[$symbol ]($style)"; };
+ rust = { symbol = ""; };
+ nix_shell.format = "[$symbol$state ]($style)";
+
+ git_status = {
+ conflicted = "󰦎";
+ ahead = "";
+ behind = "";
+ diverged = "";
+ renamed = "";
+ deleted = "x";
+ };
+ };
+ };
+ };
+}
diff --git a/hm/soft/awww.nix b/hm/soft/awww.nix
new file mode 100644
index 0000000..e807c9d
--- /dev/null
+++ b/hm/soft/awww.nix
@@ -0,0 +1,14 @@
+{ config, lib, pkgs, inputs, ... }:
+let
+ cfg = config.szpont.hm.soft.awww;
+in
+{
+ options.szpont.hm.soft.awww.enable = lib.mkEnableOption "enables awww";
+
+ config = lib.mkIf cfg.enable {
+ services.swww = {
+ enable = true;
+ package = inputs.awww.packages.${pkgs.stdenv.hostPlatform.system}.awww;
+ };
+ };
+}
diff --git a/hm/soft/easyeffects.nix b/hm/soft/easyeffects.nix
new file mode 100644
index 0000000..beb9ad6
--- /dev/null
+++ b/hm/soft/easyeffects.nix
@@ -0,0 +1,13 @@
+{ config, lib, ... }:
+let
+ cfg = config.szpont.hm.soft.easyeffects;
+in
+{
+ options.szpont.hm.soft.easyeffects.enable = lib.mkEnableOption "EasyEffects audio equalizer";
+
+ config = lib.mkIf cfg.enable {
+ services.easyeffects = {
+ enable = true;
+ };
+ };
+}
diff --git a/hm/soft/fuzzel.nix b/hm/soft/fuzzel.nix
new file mode 100644
index 0000000..234aff7
--- /dev/null
+++ b/hm/soft/fuzzel.nix
@@ -0,0 +1,13 @@
+{ config, lib, ... }:
+let
+ cfg = config.szpont.hm.soft.fuzzel;
+in
+{
+ options.szpont.hm.soft.fuzzel.enable = lib.mkEnableOption "enables fuzzel";
+
+ config = lib.mkIf cfg.enable {
+ programs.fuzzel = {
+ enable = true;
+ };
+ };
+}
diff --git a/hm/soft/gaming.nix b/hm/soft/gaming.nix
new file mode 100644
index 0000000..5fc7095
--- /dev/null
+++ b/hm/soft/gaming.nix
@@ -0,0 +1,12 @@
+{ config, lib, ... }:
+let
+ cfg = config.szpont.hm.soft.gaming;
+in
+{
+ options.szpont.hm.soft.gaming.enable = lib.mkEnableOption "gaming hm config";
+ config = lib.mkIf cfg.enable {
+ programs.mangohud = {
+ enable = true;
+ };
+ };
+}
diff --git a/hm/soft/media.nix b/hm/soft/media.nix
new file mode 100644
index 0000000..0184957
--- /dev/null
+++ b/hm/soft/media.nix
@@ -0,0 +1,27 @@
+{ config, lib, pkgs, ... }:
+let
+ cfg = config.szpont.hm.soft.media;
+in
+{
+ options.szpont.hm.soft.media.enable = lib.mkEnableOption "media playback and processing tools";
+
+ config = lib.mkIf cfg.enable {
+ programs.mpv = {
+ enable = true;
+ config = {
+
+ };
+ };
+ programs.yt-dlp = {
+ enable = true;
+ package = pkgs.yt-dlp_git;
+ };
+
+ home.packages = with pkgs; [
+ # syncplay
+ syncplay-nogui
+ ffmpeg
+ imagemagick
+ ];
+ };
+}
diff --git a/hm/soft/nixcord.nix b/hm/soft/nixcord.nix
new file mode 100644
index 0000000..4da3466
--- /dev/null
+++ b/hm/soft/nixcord.nix
@@ -0,0 +1,130 @@
+{ inputs, config, lib, pkgs, ... }:
+let
+ cfg = config.szpont.hm.soft.nixcord;
+in
+{
+ imports = [ inputs.nixcord.homeModules.nixcord ];
+
+ options.szpont.hm.soft.nixcord.enable = lib.mkEnableOption "nixcord configuration";
+
+ config = lib.mkIf cfg.enable {
+ programs.nixcord = {
+ enable = true;
+ package = pkgs.discord-krisp;
+ discord = {
+ enable = true;
+ vencord.enable = false;
+ equicord.enable = true;
+ };
+ config = {
+ frameless = true;
+ plugins = {
+ alwaysExpandRoles = { enable = true; hideArrow = true; };
+ alwaysTrust = { enable = true; domain = false; };
+ anammox.enable = true;
+ betterAudioPlayer.enable = true;
+ betterGifAltText.enable = true;
+ betterGifPicker.enable = true;
+ betterInvites.enable = true;
+ betterNotesBox = { enable = true; hide = true; };
+ betterQuickReact = { enable = true; columns = 6.0; rows = 1.0; compactMode = true; };
+ betterRoleContext.enable = true;
+ betterUploadButton.enable = true;
+ biggerStreamPreview.enable = true;
+ callTimer.enable = true;
+ characterCounter = { enable = true; colorEffects = false; };
+ cleanChannelName.enable = true;
+ clearUrLs.enable = true;
+ copyFileContents.enable = true;
+ copyStickerLinks.enable = true;
+ crashHandler.enable = true;
+ customTimestamps.enable = true;
+ disableCallIdle.enable = true;
+ disableDeepLinks.enable = true;
+ dontRoundMyTimestamps.enable = true;
+ equicordHelper = { enable = true; noMirroredCamera = true; };
+ expressionCloner.enable = true;
+ fakeNitro = { enable = true; enableEmojiBypass = false; enableStickerBypass = false; };
+ favoriteEmojiFirst.enable = true;
+ fixCodeblockGap.enable = true;
+ fixFileExtensions.enable = true;
+ fixImagesQuality.enable = true;
+ fixSpotifyEmbeds.enable = true;
+ fixYoutubeEmbeds.enable = true;
+ forceOwnerCrown.enable = true;
+ friendsSince.enable = true;
+ fullSearchContext.enable = true;
+ fullUserInChatbox.enable = true;
+ gifCollections = { enable = true; preventDuplicates = true; showCopyImageLink = true; };
+ gifRoulette = { enable = true; pingOwnerChance = true; };
+ guildTagSettings.enable = true;
+ homeTyping.enable = true;
+ ignoreTerms.enable = true;
+ iLoveSpam.enable = true;
+ imageFilename.enable = true;
+ imageLink.enable = true;
+ imageZoom = { enable = true; nearestNeighbour = true; saveZoomValues = true; square = true; };
+ imgToGif.enable = true;
+ inRole.enable = true;
+ inviteDefaults.enable = true;
+ memberCount.enable = true;
+ mentionAvatars = { enable = true; showAtSymbol = true; };
+ messageLinkEmbeds.enable = true;
+ messageLogger = { enable = true; ignoreSelf = true; };
+ moyai.enable = true;
+ musicControls.enable = true;
+ neverPausePreviews.enable = true;
+ newGuildSettings = { enable = true; messages = 1; };
+ newPluginsManager.enable = true;
+ noF1.enable = true;
+ noMaskedUrlPaste.enable = true;
+ noModalAnimation.enable = true;
+ noNitroUpsell.enable = true;
+ noOnboardingDelay.enable = true;
+ noMosaic.enable = true;
+ noProfileThemes.enable = true;
+ noSystemBadge.enable = true;
+ noTypingAnimation.enable = true;
+ overrideForumDefaults = { enable = true; defaultLayout = 2; };
+ onePingPerDm.enable = true;
+ openInApp.enable = true;
+ pauseInvitesForever.enable = true;
+ permissionFreeWill = { enable = true; lockout = false; };
+ permissionsViewer.enable = true;
+ pinDMs = { enable = true; canCollapseDmSection = true; };
+ pinIcon.enable = true;
+ platformIndicators.enable = true;
+ quoter.enable = true;
+ relationshipNotifier.enable = true;
+ roleColorEverywhere.enable = true;
+ saveFavoriteGiFs.enable = true;
+ sendTimestamps.enable = true;
+ serverInfo.enable = true;
+ showConnections.enable = true;
+ showHiddenChannels = { enable = true; };
+ showHiddenThings.enable = true;
+ showResourceChannels.enable = true;
+ showTimeoutDuration.enable = true;
+ spotifyCrack = { enable = true; noSpotifyAutoPause = false; };
+ streamerModeOnStream.enable = true;
+ typingIndicator = { enable = true; indicatorMode = 2; };
+ typingTweaks.enable = true;
+ unindent.enable = true;
+ universalMention = { enable = true; globalMention = true; };
+ unlimitedAccounts.enable = true;
+ unlockedAvatarZoom.enable = true;
+ userVoiceShow.enable = true;
+ validReply.enable = true;
+ validUser.enable = true;
+ viewIcons = { enable = true; format = "png"; };
+ voiceMessages.enable = true;
+ volumeBooster.enable = true;
+ whoReacted.enable = true;
+ whosWatching.enable = true;
+ youtubeAdblock.enable = true;
+ youtubeDescription.enable = true;
+ };
+ };
+ };
+ };
+}
diff --git a/hm/soft/satty.nix b/hm/soft/satty.nix
new file mode 100644
index 0000000..d3964a7
--- /dev/null
+++ b/hm/soft/satty.nix
@@ -0,0 +1,13 @@
+{ config, lib, ... }:
+let
+ cfg = config.szpont.hm.soft.satty;
+in
+{
+ options.szpont.hm.soft.satty.enable = lib.mkEnableOption "enables satty image editor";
+
+ config = lib.mkIf cfg.enable {
+ programs.satty = {
+ enable = true;
+ };
+ };
+}
diff --git a/hm/soft/soft.nix b/hm/soft/soft.nix
new file mode 100644
index 0000000..eb975ea
--- /dev/null
+++ b/hm/soft/soft.nix
@@ -0,0 +1,15 @@
+{ ... }:
+{
+ imports = [
+ ./awww.nix
+ ./easyeffects.nix
+ ./fuzzel.nix
+ ./gaming.nix
+ ./media.nix
+ ./nixcord.nix
+ ./satty.nix
+ ./spicetify.nix
+ ./swayidle.nix
+ ./swaylock.nix
+ ];
+}
diff --git a/hm/soft/spicetify.nix b/hm/soft/spicetify.nix
new file mode 100644
index 0000000..96c4d0d
--- /dev/null
+++ b/hm/soft/spicetify.nix
@@ -0,0 +1,24 @@
+{ inputs, pkgs, config, lib, ... }:
+let
+ cfg = config.szpont.hm.soft.spicetify;
+ spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.stdenv.hostPlatform.system};
+in
+{
+ imports = [ inputs.spicetify-nix.homeManagerModules.default ];
+
+ options.szpont.hm.soft.spicetify.enable = lib.mkEnableOption "spicetify config";
+
+ config = lib.mkIf cfg.enable {
+ programs.spicetify = {
+ enable = true;
+
+ enabledExtensions = with spicePkgs.extensions; [
+ adblockify
+ hidePodcasts
+ ];
+
+ theme = spicePkgs.themes.catppuccin;
+ colorScheme = "mocha";
+ };
+ };
+}
diff --git a/hm/soft/swayidle.nix b/hm/soft/swayidle.nix
new file mode 100644
index 0000000..d06c74a
--- /dev/null
+++ b/hm/soft/swayidle.nix
@@ -0,0 +1,13 @@
+{ config, lib, ... }:
+let
+ cfg = config.szpont.hm.soft.swayidle;
+in
+{
+ options.szpont.hm.soft.swayidle.enable = lib.mkEnableOption "enables swayidle";
+
+ config = lib.mkIf cfg.enable {
+ services.swayidle = {
+ enable = true;
+ };
+ };
+}
diff --git a/hm/soft/swaylock.nix b/hm/soft/swaylock.nix
new file mode 100644
index 0000000..a303e48
--- /dev/null
+++ b/hm/soft/swaylock.nix
@@ -0,0 +1,14 @@
+{ config, lib, pkgs, ... }:
+let
+ cfg = config.szpont.hm.soft.swaylock;
+in
+{
+ options.szpont.hm.soft.swaylock.enable = lib.mkEnableOption "enables swaylock";
+
+ config = lib.mkIf cfg.enable {
+ programs.swaylock = {
+ enable = true;
+ package = pkgs.swaylock-effects;
+ };
+ };
+}