diff --git a/flake.nix b/flake.nix index 9231c23..802fe99 100644 --- a/flake.nix +++ b/flake.nix @@ -8,6 +8,7 @@ ./home/profiles ./hosts ./modules + ./home-modules ]; flake = { }; diff --git a/home-modules/default.nix b/home-modules/default.nix new file mode 100644 index 0000000..8f78de4 --- /dev/null +++ b/home-modules/default.nix @@ -0,0 +1,5 @@ +{ + flake.homeManagerModules = { + xun = import ./xun; + }; +} diff --git a/home-modules/xun/default.nix b/home-modules/xun/default.nix new file mode 100644 index 0000000..c19e3c4 --- /dev/null +++ b/home-modules/xun/default.nix @@ -0,0 +1,8 @@ +{ + imports = [ + ./develop + ./gaming + ./programs + ./desktop + ]; +} diff --git a/home-modules/xun/desktop/default.nix b/home-modules/xun/desktop/default.nix new file mode 100644 index 0000000..4f118c5 --- /dev/null +++ b/home-modules/xun/desktop/default.nix @@ -0,0 +1,39 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.xun.desktop; +in { + options.xun.desktop = { + xdg.enable = lib.mkEnableOption "xdg env vars"; + }; + + config = lib.mkMerge [ + (lib.mkIf cfg.xdg.enable { + xdg = let + home = config.home.homeDirectory; + in { + enable = true; + cacheHome = config.home.homeDirectory + "/.local/cache"; + + userDirs = { + enable = true; + desktop = home + "/desktop"; + documents = home + "/docs"; + download = home + "/down"; + music = home + "/music"; + pictures = home + "/pics"; + publicShare = home + "/share"; + videos = home + "/vids"; + extraConfig = { + XDG_SCREENSHOTS_DIR = config.xdg.userDirs.pictures + "/screenshots"; + }; + }; + }; + + home.packages = [pkgs.xdg-utils]; + }) + ]; +} diff --git a/home-modules/xun/develop/default.nix b/home-modules/xun/develop/default.nix new file mode 100644 index 0000000..8296dff --- /dev/null +++ b/home-modules/xun/develop/default.nix @@ -0,0 +1,62 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.xun.develop; +in { + options.xun.develop = let + enableOption = name: default: lib.mkEnableOption name // {inherit default;}; + in { + enable = enableOption "develop" false; + git.enable = enableOption "git" true; + nix.enable = enableOption "nix" true; + tools.enable = enableOption "tools" true; + docs.enable = enableOption "man caches" false; + lsp.c.enable = enableOption "clangd" false; + }; + + config = lib.mkIf cfg.enable ( + lib.mkMerge [ + (lib.mkIf cfg.nix.enable { + home.packages = with pkgs; [nil alejandra]; + }) + (lib.mkIf cfg.tools.enable { + home.packages = with pkgs; [tokei]; + }) + (lib.mkIf cfg.git.enable { + home.packages = with pkgs; [lazygit]; + programs.gh.enable = true; + programs.gh-dash.enable = true; + + programs.git = { + enable = true; + delta.enable = true; + lfs.enable = true; + + ignores = ["*~" ".direnv"]; + + signing = { + key = "${config.home.homeDirectory}/.ssh/id_ed25519"; + signByDefault = true; + }; + + extraConfig = { + gpg.format = "ssh"; + push.autoSetupRemote = true; + }; + + userEmail = "xunuwu@gmail.com"; + userName = "xunuwu"; + }; + }) + (lib.mkIf cfg.lsp.c.enable { + home.packages = with pkgs; [clang-tools]; + }) + (lib.mkIf cfg.docs.enable { + programs.man.generateCaches = true; + }) + ] + ); +} diff --git a/home-modules/xun/gaming/default.nix b/home-modules/xun/gaming/default.nix new file mode 100644 index 0000000..b96be1c --- /dev/null +++ b/home-modules/xun/gaming/default.nix @@ -0,0 +1,26 @@ +{ + pkgs, + config, + lib, + self, + ... +}: let + cfg = config.xun.gaming; +in { + options.xun.gaming = { + krunker.enable = lib.mkEnableOption "krunker"; + roblox.sobercookie.enable = lib.mkEnableOption "sobercookie"; + }; + config = lib.mkMerge [ + (lib.mkIf cfg.krunker.enable { + home.packages = [ + self.packages.${pkgs.system}.krunker + ]; + }) + (lib.mkIf cfg.roblox.sobercookie.enable { + home.packages = [ + self.packages.${pkgs.system}.sobercookie + ]; + }) + ]; +} diff --git a/home-modules/xun/programs/default.nix b/home-modules/xun/programs/default.nix new file mode 100644 index 0000000..19b2fbb --- /dev/null +++ b/home-modules/xun/programs/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./terminal + ]; +} diff --git a/home-modules/xun/programs/terminal/default.nix b/home-modules/xun/programs/terminal/default.nix new file mode 100644 index 0000000..c858419 --- /dev/null +++ b/home-modules/xun/programs/terminal/default.nix @@ -0,0 +1,132 @@ +{ + config, + lib, + inputs, + ... +}: let + cfg = config.xun.programs.terminal; +in { + imports = [ + inputs.nix-index-database.hmModules.nix-index + ]; + + options.xun.programs.terminal = { + direnv.enable = lib.mkEnableOption "direnv"; + comma.enable = lib.mkEnableOption "comma"; + tmux.enable = lib.mkEnableOption "tmux"; + irssi.enable = lib.mkEnableOption "irssi"; + shell.zsh = { + enable = lib.mkEnableOption "zsh"; + }; + }; + + config = lib.mkMerge [ + (lib.mkIf cfg.shell.zsh.enable { + programs.fzf.enable = true; + programs.zsh = { + enable = true; + autocd = true; + enableCompletion = true; + autosuggestion.enable = true; + dotDir = ".config/zsh"; + defaultKeymap = "emacs"; + + history = { + expireDuplicatesFirst = true; + path = "${config.xdg.dataHome}/zsh_history"; + }; + initExtra = '' + unsetopt beep + + ## KEYBINDS ## + bindkey "^[[1;5D" backward-word + bindkey "^[[1;5C" forward-word + + # improve ^w behaviour + WORDCHARS= + + # pretty completion menu + zstyle ':completion:*' menu select + + # shift-tab in completion menu + bindkey '^[[Z' reverse-menu-complete + + zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # Case insensitive completion + + + ## MISC ## + setopt extendedglob + + + # Show completion categories + zstyle ':completion:*:*:*:*:descriptions' format '%F{magenta}<-%d->%f' + + + ## PROMPT ## + autoload -Uz vcs_info + precmd_vcs_info() { vcs_info } + precmd_functions+=( precmd_vcs_info ) + zstyle ':vcs_info:git:*' formats ' %b ' + setopt prompt_subst + + PROMPT="%F{blue}[%F{magenta}%n%F{blue}@%F{magenta}%M%F{blue}] %~%f %F{green}\$vcs_info_msg_0_%f%(?..%F{red}| %? )%#%f " + ''; + }; + }) + (lib.mkIf cfg.direnv.enable { + programs.direnv = { + enable = true; + enableZshIntegration = true; + nix-direnv.enable = true; + }; + }) + (lib.mkIf cfg.comma.enable { + programs.nix-index-database.comma.enable = true; + programs.nix-index = { + enableBashIntegration = false; + enableFishIntegration = false; + enableZshIntegration = false; + }; + }) + (lib.mkIf cfg.tmux.enable { + programs.tmux = { + enable = true; + baseIndex = 1; + clock24 = true; + mouse = true; + escapeTime = 0; + extraConfig = '' + bind '"' split-window -c "#{pane_current_path}" + bind % split-window -h -c "#{pane_current_path}" + bind c new-window -c "#{pane_current_path}"; + + set -g status-style bg=default + setw -g window-status-current-style fg=#be95ff + set -g status-justify absolute-centre + set -g status-interval 5 + set -g status-right "#[fg=#25be6a]#(free -h | awk 'NR==2{print $3\"/\"$2}')" + set -ag status-right "#[fg=default] %a %d %b %H:%M" + ''; + }; + }) + (lib.mkIf cfg.irssi.enable { + # TODO: make more customizable maybe + programs.irssi = { + enable = true; + networks = { + liberachat = { + nick = "wheat"; + server = { + address = "irc.libera.chat"; + port = 6697; + autoConnect = true; + }; + channels = { + nixos.autoJoin = false; + }; + }; + }; + }; + }) + ]; +} diff --git a/home/profiles/default.nix b/home/profiles/default.nix index 7f293cc..885a835 100644 --- a/home/profiles/default.nix +++ b/home/profiles/default.nix @@ -10,7 +10,7 @@ "xun@kidney" = [ ../. ./kidney - inputs.nix-index-database.hmModules.nix-index + # inputs.nix-index-database.hmModules.nix-index { programs.nix-index = { enableBashIntegration = false; @@ -23,17 +23,9 @@ "xun@nixdesk" = [ ../. ./nixdesk - inputs.nix-index-database.hmModules.nix-index inputs.sops-nix.homeManagerModules.sops inputs.nur.hmModules.nur - { - programs.nix-index = { - enableBashIntegration = false; - enableFishIntegration = false; - enableZshIntegration = false; - }; - home.stateVersion = "23.11"; - } + {home.stateVersion = "23.11";} ]; "xun@hopper" = [ ../. diff --git a/home/profiles/kidney/default.nix b/home/profiles/kidney/default.nix index 8477719..c1be9d4 100644 --- a/home/profiles/kidney/default.nix +++ b/home/profiles/kidney/default.nix @@ -1,19 +1,37 @@ -{inputs, ...}: { +{ + inputs, + self, + ... +}: { imports = [ + self.homeManagerModules.xun inputs.small-nvim.homeManagerModules.small-nvim - ../../terminal/shell/zsh.nix - ../../terminal/programs - ../../terminal/programs/lazygit.nix - ../../develop - ../../develop/small-misc.nix + # ../../terminal/shell/zsh.nix + # ../../terminal/programs + # ../../terminal/programs/lazygit.nix + # ../../develop + # ../../develop/small-misc.nix ]; - xun.small-nvim = { - enable = true; - colorscheme = { - name = "dayfox"; - package = "EdenEast/nightfox.nvim"; + xun = { + small-nvim = { + enable = true; + colorscheme = { + name = "dayfox"; + package = "EdenEast/nightfox.nvim"; + }; + wakatime.enable = false; + }; + develop.enable = true; + desktop = { + xdg.enable = true; + }; + programs.terminal = { + shell.zsh.enable = true; + direnv.enable = true; + comma.enable = true; + tmux.enable = true; + irssi.enable = true; }; - wakatime.enable = false; }; } diff --git a/home/profiles/nixdesk/default.nix b/home/profiles/nixdesk/default.nix index 8f3cb53..e2ea65c 100644 --- a/home/profiles/nixdesk/default.nix +++ b/home/profiles/nixdesk/default.nix @@ -1,14 +1,19 @@ -{inputs, ...}: { +{ + inputs, + self, + ... +}: { imports = [ + self.homeManagerModules.xun inputs.small-nvim.homeManagerModules.small-nvim ./kanshi.nix ./defaults.nix ../../secrets - ../../terminal + # ../../terminal ../../terminal/programs/zellij.nix - ../../terminal/programs/irssi.nix + # ../../terminal/programs/irssi.nix ../../terminal/programs/lazygit.nix ../../terminal/programs/beets.nix ../../editors/emacs.nix @@ -28,8 +33,8 @@ ../../programs/desktop/sway # development - ../../develop - ../../develop/small-misc.nix + #../../develop + #../../develop/small-misc.nix # programs ../../programs/misc/keepassxc.nix @@ -58,12 +63,29 @@ ../../services/system/polkit-agent.nix ../../services/system/udiskie.nix # although i dont need this for usb memory, it is quite convenient for flashing qmk ]; - xun.small-nvim = { - enable = true; - colorscheme = { - name = "carbonfox"; - package = "EdenEast/nightfox.nvim"; + xun = { + small-nvim = { + enable = true; + colorscheme = { + name = "carbonfox"; + package = "EdenEast/nightfox.nvim"; + }; + wakatime.enable = true; + }; + desktop.xdg.enable = true; + programs.terminal = { + shell.zsh.enable = true; + direnv.enable = true; + comma.enable = true; + tmux.enable = true; + irssi.enable = true; + }; + develop = { + enable = true; + docs.enable = true; + lsp = { + c.enable = true; + }; }; - wakatime.enable = true; }; } diff --git a/home/programs/browsers/firefox/default.nix b/home/programs/browsers/firefox/default.nix index 08c8263..9d6b688 100644 --- a/home/programs/browsers/firefox/default.nix +++ b/home/programs/browsers/firefox/default.nix @@ -139,7 +139,7 @@ "Google".metaData.alias = "@go"; "DuckDuckGo".metaData.alias = "@ddg"; "Wikipedia".metaData.alias = "@wiki"; - "Bind".metaData.hidden = true; + "Bing".metaData.hidden = true; }; }; userChrome = builtins.readFile ./userChrome.css; diff --git a/home/programs/media/mpv.nix b/home/programs/media/mpv.nix index 158d93c..cc87057 100644 --- a/home/programs/media/mpv.nix +++ b/home/programs/media/mpv.nix @@ -1,4 +1,4 @@ -{ +{pkgs, ...}: { programs.mpv = { enable = true; config = { @@ -29,5 +29,8 @@ user-agent = "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0"; }; }; + scripts = with pkgs.mpvScripts; [ + cutter + ]; }; } diff --git a/home/terminal/programs/xdg.nix b/home/terminal/programs/xdg.nix index 90bce4a..d75c895 100644 --- a/home/terminal/programs/xdg.nix +++ b/home/terminal/programs/xdg.nix @@ -1,3 +1,4 @@ +# TODO: move this somewhere more reasonable { config, pkgs, diff --git a/hosts/default.nix b/hosts/default.nix index a3d9d77..87aa2f6 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -43,10 +43,15 @@ in { (modulePaths [ "core/tools.nix" "core/users.nix" + "core/locale.nix" "programs/tools.nix" "programs/zsh.nix" "programs/home-manager.nix" + "hardware/graphics.nix" + + "services/flatpak.nix" + "services/xdg-portals.nix" "nix" "nix/gc.nix" @@ -83,9 +88,9 @@ in { #"services/ollama.nix" "desktop/x11/nosleep.nix" - "programs/gamemode.nix" - "programs/gamescope.nix" - "programs/steam.nix" + # "programs/gamemode.nix" # TEMP: TODO + # "programs/gamescope.nix" # TEMP: TODO + # "programs/steam.nix" # TEMP: TODO "programs/RE" ]) diff --git a/hosts/nixdesk/default.nix b/hosts/nixdesk/default.nix index ceddb8b..5ad966a 100644 --- a/hosts/nixdesk/default.nix +++ b/hosts/nixdesk/default.nix @@ -2,6 +2,7 @@ imports = [ ./hardware.nix ./hibernate-boot.nix + ./testing.nix ]; networking.hostName = "nixdesk"; diff --git a/hosts/nixdesk/testing.nix b/hosts/nixdesk/testing.nix new file mode 100644 index 0000000..c17c066 --- /dev/null +++ b/hosts/nixdesk/testing.nix @@ -0,0 +1,11 @@ +{self, ...}: { + imports = [ + self.nixosModules.xun + ]; + xun.gaming = { + enable = true; + steam.enable = true; + gamescope.enable = true; + gamemode.enable = true; + }; +} diff --git a/modules/default.nix b/modules/default.nix index d402610..cbed782 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,5 +1,6 @@ { flake.nixosModules = { #name = import ./name; + xun = import ./xun; }; } diff --git a/modules/xun/default.nix b/modules/xun/default.nix new file mode 100644 index 0000000..5fd7ee3 --- /dev/null +++ b/modules/xun/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./gaming + ]; +} diff --git a/modules/xun/gaming/default.nix b/modules/xun/gaming/default.nix new file mode 100644 index 0000000..3e81497 --- /dev/null +++ b/modules/xun/gaming/default.nix @@ -0,0 +1,47 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.xun.gaming; +in { + options.xun.gaming = { + enable = lib.mkEnableOption "gaming"; + steam.enable = lib.mkEnableOption "steam"; + gamemode.enable = lib.mkEnableOption "gamemode"; + gamescope.enable = lib.mkEnableOption "gamescope"; + }; + + config = lib.mkIf cfg.enable ({ + programs.gamescope = lib.mkIf cfg.gamescope.enable { + enable = true; + capSysNice = false; # doesnt work with steam & heroic + }; + programs.gamemode.enable = cfg.gamemode.enable; + } + // lib.mkIf cfg.steam.enable { + # TODO: protontricks & steamtinkerlaunch + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + localNetworkGameTransfers.openFirewall = true; + extraCompatPackages = with pkgs; [ + proton-ge-bin + ]; + ## Fixes gamescope (NOTE: no clue what this means) + extraPackages = with pkgs; [ + xorg.libXcursor + xorg.libXi + xorg.libXinerama + xorg.libXScrnSaver + libpng + libpulseaudio + libvorbis + stdenv.cc.cc.lib + libkrb5 + keyutils + ]; + }; + }); +} diff --git a/system/core/default.nix b/system/core/default.nix index f9dcb4a..ffa87ad 100644 --- a/system/core/default.nix +++ b/system/core/default.nix @@ -3,17 +3,8 @@ ./security.nix ./users.nix ./ssh.nix + ./locale.nix ../nix ../programs/zsh.nix ]; - - i18n = { - defaultLocale = "en_US.UTF-8"; - supportedLocales = [ - "en_US.UTF-8/UTF-8" - ]; - }; - services.xserver.xkb.layout = "eu"; - - time.timeZone = lib.mkDefault "Europe/Berlin"; } diff --git a/system/core/locale.nix b/system/core/locale.nix new file mode 100644 index 0000000..ec028eb --- /dev/null +++ b/system/core/locale.nix @@ -0,0 +1,11 @@ +{lib, ...}: { + i18n = { + defaultLocale = "en_US.UTF-8"; + supportedLocales = [ + "en_US.UTF-8/UTF-8" + ]; + }; + services.xserver.xkb.layout = "eu"; + + time.timeZone = lib.mkDefault "Europe/Berlin"; +} diff --git a/system/services/xdg-portals.nix b/system/services/xdg-portals.nix new file mode 100644 index 0000000..faff144 --- /dev/null +++ b/system/services/xdg-portals.nix @@ -0,0 +1,11 @@ +{pkgs, ...}: { + xdg.portal = { + enable = true; + extraPortals = with pkgs; [ + xdg-desktop-portal-gtk + ]; + config = { + common.default = ["gtk"]; + }; + }; +}