diff --git a/flake.nix b/flake.nix index 68189f5..cddc72a 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,7 @@ description = "My NixOS config flake"; outputs = inputs: let pkgs = inputs.nixpkgs.legacyPackages.x86_64-linux; - user = import ./modules/user {inherit pkgs;}; + user = import ./modules/user {inherit inputs pkgs;}; in { nixosConfigurations = import ./hosts inputs; diff --git a/hosts/temperance/configuration.nix b/hosts/temperance/configuration.nix index 1509a49..072bab8 100644 --- a/hosts/temperance/configuration.nix +++ b/hosts/temperance/configuration.nix @@ -109,7 +109,6 @@ in { programs = { ssh.enable = true; btop.enable = true; - fish.enable = true; nh.enable = true; waybar.enable = true; # steam.enable = true; diff --git a/hosts/temperance/programs.nix b/hosts/temperance/programs.nix index 5240c88..655102d 100644 --- a/hosts/temperance/programs.nix +++ b/hosts/temperance/programs.nix @@ -24,6 +24,7 @@ keepassxc lazygit libtool + mpv nextcloud-client nicotine-plus swww diff --git a/modules/programs/cli/atuin.nix b/modules/programs/cli/atuin.nix deleted file mode 100644 index e815923..0000000 --- a/modules/programs/cli/atuin.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - inherit (config.meta.mainUser) username; -in { - home-manager.users.${username}.programs.atuin = { - enable = true; - package = pkgs.atuin; - enableFishIntegration = true; - enableBashIntegration = true; - }; -} diff --git a/modules/programs/cli/eza.nix b/modules/programs/cli/eza.nix deleted file mode 100644 index b19f47a..0000000 --- a/modules/programs/cli/eza.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - inherit (config.modules.other.system) username; - inherit (lib) mkIf; - cfg = config.modules.system.programs.eza; -in { - config = mkIf cfg.enable { - home-manager.users.${username} = { - programs.eza = { - enable = true; - package = pkgs.eza; - git = true; - icons = "auto"; - enableNushellIntegration = true; - enableBashIntegration = true; - enableFishIntegration = true; - enableZshIntegration = true; - }; - }; - }; -} diff --git a/modules/programs/cli/fish.nix b/modules/programs/cli/fish.nix deleted file mode 100644 index 8ce3d28..0000000 --- a/modules/programs/cli/fish.nix +++ /dev/null @@ -1,69 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; let - cfg = config.modules.programs.fish; - inherit (config.modules.other.system) username; -in { - options.modules.programs.fish = { - enable = mkEnableOption "fish"; - extraAliases = mkOption { - type = types.attrs; - description = "extra shell aliases"; - default = {}; - }; - }; - - config = mkIf cfg.enable { - programs.fish.enable = false; - - # homix.".config/fish/config.fish".source = fishinit; - # users.users.${username}.shell = pkgs.fish; - - environment = { - # shells = [pkgs.fish]; - # pathsToLink = ["/share/fish"]; - }; - - home-manager.users.${username} = { - programs = { - fish = { - enable = true; - interactiveShellInit = "set fish_greeting"; - plugins = [ - { - name = "sponge"; - inherit (pkgs.fishPlugins.sponge) src; - } - { - name = "done"; - inherit (pkgs.fishPlugins.done) src; - } - { - name = "puffer"; - inherit (pkgs.fishPlugins.puffer) src; - } - ]; - shellAbbrs = { - c = "clear"; - cc = "cd ~ && clear"; - mv = "mv -iv"; - rm = "trash -v"; - ls = "eza "; - l = "eza -a "; - la = "eza -lha --git"; - lg = "lazygit"; - cd = "z"; - v = "nvim"; - h = "hx"; - k = "kak"; - e = "emacs"; - }; - }; - }; - }; - }; -} diff --git a/modules/programs/cli/module.nix b/modules/programs/cli/module.nix index df3a56a..7fc47bd 100644 --- a/modules/programs/cli/module.nix +++ b/modules/programs/cli/module.nix @@ -1,13 +1,7 @@ _: { imports = [ - ./fish.nix ./nh.nix - ./starship.nix - ./thefuck.nix - ./zoxide.nix ./beets.nix - ./atuin.nix ./zellij - ./eza.nix ]; } diff --git a/modules/programs/cli/starship.nix b/modules/programs/cli/starship.nix deleted file mode 100644 index 61fc58b..0000000 --- a/modules/programs/cli/starship.nix +++ /dev/null @@ -1,101 +0,0 @@ -# Credits to raf, his flake is in the README.md -{ - config, - lib, - ... -}: let - inherit (builtins) map; - inherit (config.meta.mainUser) username; - hmCfg = config.home-manager.users.${username}; - - inherit (lib.strings) concatStrings; -in { - home-manager.users.${username} = let - elemsConcatted = concatStrings ( - map (s: "\$${s}") [ - "hostname" - "username" - "directory" - "shell" - "nix_shell" - "git_branch" - "git_commit" - "git_state" - "git_status" - "jobs" - "cmd_duration" - ] - ); - in { - home.sessionVariables = { - STARSHIP_CACHE = "${hmCfg.home.homeDirectory}/.cache/starship"; - }; - programs.starship = { - enable = true; - enableFishIntegration = true; - enableTransience = true; - settings = { - scan_timeout = 2; - command_timeout = 2000; # nixpkgs makes starship implode with lower values - add_newline = false; - line_break.disabled = false; - - format = "${elemsConcatted}\n$character"; - - hostname = { - ssh_only = true; - disabled = false; - format = "@[$hostname](bold blue) "; # the whitespace at the end is actually important - }; - - # configure specific elements - character = { - error_symbol = "[](bold red)"; - success_symbol = "[](bold green)"; - vicmd_symbol = "[](bold yellow)"; - format = "$symbol [|](bold bright-black) "; - }; - - username = { - format = "[$user]($style) in "; - }; - - directory = { - truncation_length = 2; - - # removes the read_only symbol from the format, it doesn't play nicely with my folder icon - format = "[ ](bold green) [$path]($style) "; - }; - - # git - git_commit.commit_hash_length = 7; - git_branch.style = "bold purple"; - git_status = { - style = "red"; - ahead = "⇡ "; - behind = "⇣ "; - conflicted = " "; - renamed = "»"; - deleted = "✘ "; - diverged = "⇆ "; - modified = "!"; - stashed = "≡"; - staged = "+"; - untracked = "?"; - }; - - # language configurations - # the whitespaces at the end *are* necessary for proper formatting - lua.symbol = "[ ](blue) "; - python.symbol = "[ ](blue) "; - rust.symbol = "[ ](red) "; - nix_shell.symbol = "[󱄅 ](blue) "; - golang.symbol = "[󰟓 ](blue)"; - c.symbol = "[ ](black)"; - nodejs.symbol = "[󰎙 ](yellow)"; - - package.symbol = "📦 "; - }; - }; - }; -} diff --git a/modules/programs/cli/thefuck.nix b/modules/programs/cli/thefuck.nix deleted file mode 100644 index e5aadd0..0000000 --- a/modules/programs/cli/thefuck.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - inherit (config.modules.other.system) username; - inherit (lib) mkIf; - cfg = config.modules.system.programs.oh-my-posh; -in { - config = mkIf cfg.enable { - home-manager.users.${username} = { - programs.thefuck = { - enable = true; - package = pkgs.thefuck; - enableInstantMode = true; - enableNushellIntegration = true; - enableBashIntegration = true; - enableFishIntegration = true; - enableZshIntegration = true; - }; - }; - }; -} diff --git a/modules/programs/cli/zoxide.nix b/modules/programs/cli/zoxide.nix deleted file mode 100644 index 079ad5c..0000000 --- a/modules/programs/cli/zoxide.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - inherit (config.modules.other.system) username; - inherit (lib) mkIf; - cfg = config.modules.system.programs.eza; -in { - config = mkIf cfg.enable { - home-manager.users.${username} = { - programs.zoxide = { - enable = true; - package = pkgs.zoxide; - - enableNushellIntegration = true; - enableBashIntegration = true; - enableFishIntegration = true; - enableZshIntegration = true; - }; - }; - }; -} diff --git a/modules/programs/editors/kakoune/default.nix b/modules/programs/editors/kakoune/default.nix index 959ef43..7006fc2 100644 --- a/modules/programs/editors/kakoune/default.nix +++ b/modules/programs/editors/kakoune/default.nix @@ -39,58 +39,5 @@ in { environment.systemPackages = [ custom-kakoune ]; - home-manager.users.${username}.programs.kakoune = mkIf false { - enable = true; - package = custom-kakoune; - config = { - autoComplete = ["insert"]; - autoReload = "yes"; - indentWidth = 4; - tabStop = 4; - incrementalSearch = false; - numberLines = { - enable = true; - relative = true; - highlightCursor = true; - separator = " "; - }; - - scrollOff = { - lines = 4; - columns = 4; - }; - wrapLines = { - enable = true; - indent = true; - word = true; - }; - - ui = { - enableMouse = true; - assistant = "none"; - statusLine = "bottom"; - }; - }; - - plugins = with pkgs.kakounePlugins; [ - active-window-kak - auto-pairs-kak - byline-kak # ope - prelude-kak # dependency of byline - kak-ls - kakboard - kakoune-buffer-switcher - kakoune-buffers - kakoune-lsp - kakoune-rainbow - kakoune-registers - kakoune-vertical-selection - powerline-kak - quickscope-kak - smarttab-kak - zig-kak - ]; - # extraConfig = ./kakrc; - }; }; } diff --git a/modules/programs/gui/module.nix b/modules/programs/gui/module.nix index 1a434c0..45eded5 100644 --- a/modules/programs/gui/module.nix +++ b/modules/programs/gui/module.nix @@ -3,8 +3,6 @@ _: { ./vesktop.nix ./foot.nix ./spicetify.nix - ./mpv.nix - ./zathura.nix ./steam.nix ./waybar.nix ./schizofox.nix diff --git a/modules/programs/gui/mpv.nix b/modules/programs/gui/mpv.nix deleted file mode 100644 index 9312f28..0000000 --- a/modules/programs/gui/mpv.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - cfg = config.modules.usrEnv.programs.media.mpv; - inherit (config.modules.other.system) username; - inherit (lib) mkIf; -in { - config = mkIf cfg.enable { - home-manager.users.${username} = { - programs.mpv = { - enable = true; - config = { - hwdec = "auto"; - volume = 50; - osc = "no"; - osd-bar = "no"; - border = "no"; - }; - scripts = with pkgs.mpvScripts; [mpris thumbfast sponsorblock uosc]; - }; - }; - }; -} diff --git a/modules/programs/gui/vivado.nix b/modules/programs/gui/vivado.nix deleted file mode 100644 index 392689b..0000000 --- a/modules/programs/gui/vivado.nix +++ /dev/null @@ -1,46 +0,0 @@ -{pkgs, ...}: let - vivado-desktop-symbol = pkgs.makeDesktopItem { - name = "vivado2019.2"; - desktopName = "Vivado"; - exec = "${pkgs.nur.repos.Nick1296.vivado-2019-2}/bin/vivado"; - }; -in { - environment.systemPackages = [ - # this propietary software is huge, but I need it for - # university - pkgs.nur.repos.Nick1296.vivado-2019-2 - vivado-desktop-symbol - ]; - - # Create udev rules. Reference: https://blog.kotatsu.dev/posts/2021-09-14-vivado-on-nixos/ - services.udev.packages = [ - (pkgs.writeTextFile { - name = "xilinx-dilligent-usb-udev"; - destination = "/etc/udev/rules.d/52-xilinx-digilent-usb.rules"; - text = '' - ATTR{idVendor}=="1443", MODE:="666" - ACTION=="add", ATTR{idVendor}=="0403", ATTR{manufacturer}=="Digilent", MODE:="666" - ''; - }) - (pkgs.writeTextFile { - name = "xilinx-pcusb-udev"; - destination = "/etc/udev/rules.d/52-xilinx-pcusb.rules"; - text = '' - ATTR{idVendor}=="03fd", ATTR{idProduct}=="0008", MODE="666" - ATTR{idVendor}=="03fd", ATTR{idProduct}=="0007", MODE="666" - ATTR{idVendor}=="03fd", ATTR{idProduct}=="0009", MODE="666" - ATTR{idVendor}=="03fd", ATTR{idProduct}=="000d", MODE="666" - ATTR{idVendor}=="03fd", ATTR{idProduct}=="000f", MODE="666" - ATTR{idVendor}=="03fd", ATTR{idProduct}=="0013", MODE="666" - ATTR{idVendor}=="03fd", ATTR{idProduct}=="0015", MODE="666" - ''; - }) - (pkgs.writeTextFile { - name = "xilinx-ftdi-usb-udev"; - destination = "/etc/udev/rules.d/52-xilinx-ftdi-usb.rules"; - text = '' - ACTION=="add", ATTR{idVendor}=="0403", ATTR{manufacturer}=="Xilinx", MODE:="666" - ''; - }) - ]; -} diff --git a/modules/programs/gui/zathura.nix b/modules/programs/gui/zathura.nix deleted file mode 100644 index 213ade0..0000000 --- a/modules/programs/gui/zathura.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; let - cfg = config.modules.system.programs.zathura; - inherit (config.modules.other.system) username; -in { - config = mkIf cfg.enable { - home-manager.users.${username} = { - programs.zathura = { - enable = true; - options = { - selection-clipboard = "clipboard"; - adjust-open = "best-fit"; - pages-per-row = "1"; - scroll-page-aware = "true"; - scroll-full-overlap = "0.01"; - scroll-step = "100"; - zoom-min = "10"; - guioptions = "none"; - }; - }; - }; - }; -} diff --git a/modules/services/mpd.nix b/modules/services/mpd.nix index 281d5a1..c327ae2 100644 --- a/modules/services/mpd.nix +++ b/modules/services/mpd.nix @@ -37,19 +37,5 @@ in { } ''; }; - home-manager.users.${username} = { - # services = { - # mpd-mpris = { - # enable = true; - # mpd = { - # host = "127.0.0.1"; - # network = "unix"; - # port = 6600; - # useLocal = true; - # }; - # }; - - # }; - }; }; } diff --git a/modules/user/default.nix b/modules/user/default.nix index 8549342..6d2e201 100644 --- a/modules/user/default.nix +++ b/modules/user/default.nix @@ -1,6 +1,11 @@ -{pkgs, ...}: rec { +{ + inputs, + pkgs, + ... +}: rec { packages = { fish = pkgs.callPackage ./shell {}; + helix = pkgs.callPackge ./helix {}; }; shell = pkgs.mkShell { name = "bloxx-shell"; diff --git a/modules/user/shell/default.nix b/modules/user/shell/default.nix index df0d26e..fcd9021 100644 --- a/modules/user/shell/default.nix +++ b/modules/user/shell/default.nix @@ -1,6 +1,6 @@ # This shell setup was inspired by sioodmy. Check out his setup! { - lib, + inputs, pkgs, ... }: let diff --git a/modules/user/shell/helix/default.nix b/modules/user/shell/helix/default.nix new file mode 100644 index 0000000..0521d77 --- /dev/null +++ b/modules/user/shell/helix/default.nix @@ -0,0 +1,36 @@ +{ + inputs, + pkgs, + ... +}: let + toml = pkgs.formats.toml {}; + inherit (inputs.helix.packages.${pkgs.stdenv.system}) helix; + packages = with pkgs; [ + # C/C++ + clang-tools + + # Markdown + marksman + + # Nix + nil + lldb_19 + # Bash + bash-language-server + + # Shell + shellcheck + ]; + + helix-config = import ./config.nix; + + helix-wrapped = pkgs.symlinkJoin { + name = "fish-wrapped"; + paths = [helix] ++ packages; + buildInputs = [pkgs.makeWrapper]; + postBuild = '' + wrapProgram $out/bin/fish --set XDG_CONFIG_HOME "${toml.generate "config.toml" helix-config}" + ''; + }; +in + helix-wrapped diff --git a/modules/user/shell/helix/languages.nix b/modules/user/shell/helix/languages.nix new file mode 100644 index 0000000..01ed9b4 --- /dev/null +++ b/modules/user/shell/helix/languages.nix @@ -0,0 +1,203 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.modules.system.programs.editors.helix; + inherit (config.modules.other.system) username; + inherit (lib) mkIf getExe; +in { + config = mkIf cfg.enable { + home-manager.users.${username} = { + programs.helix.languages = { + language = let + extraFormatter = lang: { + command = getExe pkgs.deno; + args = ["fmt" "-" "--ext" lang]; + }; + in [ + { + name = "bash"; + auto-format = true; + formatter = { + command = getExe pkgs.shfmt; + args = ["-i" "2"]; + }; + } + { + name = "clojure"; + injection-regex = "(clojure|clj|edn|boot|yuck)"; + file-types = ["clj" "cljs" "cljc" "clje" "cljr" "cljx" "edn" "boot" "yuck"]; + } + { + name = "cmake"; + auto-format = true; + language-servers = ["cmake-language-server"]; + formatter = { + command = getExe pkgs.cmake-format; + args = ["-"]; + }; + } + { + name = "javascript"; + auto-format = true; + language-servers = ["dprint" "typescript-language-server"]; + } + { + name = "json"; + formatter = extraFormatter "json"; + } + { + name = "markdown"; + auto-format = true; + formatter = extraFormatter "md"; + } + { + name = "python"; + language-servers = ["pyright"]; + formatter = { + command = getExe pkgs.black; + args = ["-" "--quiet" "--line-length 100"]; + }; + } + { + name = "typescript"; + auto-format = true; + language-servers = ["dprint" "typescript-language-server"]; + } + { + name = "rust"; + debugger = { + command = "${pkgs.lldb_19}/bin/lldb-dap"; + name = "lldb"; + transport = "stdio"; + templates = [ + { + name = "binary"; + request = "launch"; + completion = [ + { + name = "binary"; + completion = "filename"; + } + ]; + args = { + program = "{0}"; + runInTerminal = true; + }; + } + ]; + }; + } + { + name = "c"; + debugger = { + name = "gdb"; + command = "${pkgs.gdb}/bin/gdb"; + transport = "stdio"; + templates = [ + { + name = "binary"; + request = "launch"; + completion = [ + { + name = "binary"; + completion = "filename"; + } + ]; + args = { + program = "{0}"; + runInTerminal = true; + }; + } + ]; + }; + } + ]; + + language-server = { + bash-language-server = { + command = getExe pkgs.bash-language-server; + args = ["start"]; + }; + + clangd = { + command = "${pkgs.clang-tools}/bin/clangd"; + clangd.fallbackFlags = ["-std=c++2b"]; + }; + + cmake-language-server = { + command = getExe pkgs.cmake-language-server; + }; + + dprint = { + command = getExe pkgs.dprint; + args = ["lsp"]; + }; + + nil = { + command = getExe pkgs.nil; + # alejandro + config.nil.formatting.command = ["${getExe pkgs.alejandra}" "-q"]; + }; + + qmlls = { + command = "${pkgs.kdePackages.full}/bin/qmlls"; + }; + + pyright = { + command = "${pkgs.pyright}/bin/pyright-langserver"; + args = ["--stdio"]; + config = { + reportMissingTypeStubs = false; + analysis = { + typeCheckingMode = "basic"; + autoImportCompletions = true; + }; + }; + }; + + typescript-language-server = { + command = getExe pkgs.typescript-language-server; + args = ["--stdio"]; + config = let + inlayHints = { + includeInlayEnumMemberValueHints = true; + includeInlayFunctionLikeReturnTypeHints = true; + includeInlayFunctionParameterTypeHints = true; + includeInlayParameterNameHints = "all"; + includeInlayParameterNameHintsWhenArgumentMatchesName = true; + includeInlayPropertyDeclarationTypeHints = true; + includeInlayVariableTypeHints = true; + }; + in { + typescript-language-server.source = { + addMissingImports.ts = true; + fixAll.ts = true; + organizeImports.ts = true; + removeUnusedImports.ts = true; + sortImports.ts = true; + }; + + typescript = {inherit inlayHints;}; + javascript = {inherit inlayHints;}; + + hostInfo = "helix"; + }; + }; + + # vscode-css-language-server = { + # command = "${pkgs.nodePackages.vscode-langservers-extracted}/bin/vscode-css-languageserver"; + # args = ["--stdio"]; + # config = { + # provideFormatter = true; + # css.validate.enable = true; + # scss.validate.enable = true; + # }; + # }; + }; + }; + }; + }; +} diff --git a/modules/user/shell/helix/module.nix b/modules/user/shell/helix/module.nix new file mode 100644 index 0000000..dd53d06 --- /dev/null +++ b/modules/user/shell/helix/module.nix @@ -0,0 +1,81 @@ +{ + config, + inputs, + lib, + pkgs, + ... +}: let + cfg = config.modules.system.programs.editors.helix; + inherit (config.modules.other.system) username; + inherit (lib) mkIf getExe; + inherit (inputs.helix.packages.${pkgs.stdenv.system}) helix; + wrapped-helix = pkgs.symlinkJoin { + name = "helix-wrapped"; + paths = with pkgs; [ + helix + + # C/C++ + clang-tools + + # Markdown + marksman + + # Nix + nil + lldb_19 + # Bash + bash-language-server + + # Shell + shellcheck + ]; + }; +in { + imports = [./languages.nix]; + config = mkIf cfg.enable { + home-manager.users.${username} = { + programs.helix = { + enable = true; + package = wrapped-helix; + + settings = { + theme = "catppuccin_mocha"; + editor = { + cursorline = false; + color-modes = true; + indent-guides.render = true; + lsp = { + display-inlay-hints = true; + display-messages = true; + }; + line-number = "relative"; + true-color = true; + auto-format = true; + completion-timeout = 5; + mouse = true; + bufferline = "multiple"; + soft-wrap.enable = true; + cursor-shape = {insert = "bar";}; + statusline = { + left = ["spinner" "version-control" "diagnostics" "file-name"]; + right = ["file-base-name" "file-type" "selections" "position" "file-encoding"]; + }; + gutters.layout = ["diff" "diagnostics" "line-numbers" "spacer"]; + inline-diagnostics = { + cursor-line = "hint"; + other-lines = "error"; + }; + }; + keys.normal = { + space.g = [":new" ":insert-output ${getExe pkgs.lazygit}" ":buffer-close!" ":redraw"]; + esc = ["collapse_selection" "keep_primary_selection" "normal_mode"]; + A-H = "goto_previous_buffer"; + A-L = "goto_next_buffer"; + A-w = ":buffer-close"; + A-f = ":format"; + }; + }; + }; + }; + }; +} diff --git a/modules/user/shell/packages.nix b/modules/user/shell/packages.nix index 68f9213..238b02c 100644 --- a/modules/user/shell/packages.nix +++ b/modules/user/shell/packages.nix @@ -3,6 +3,7 @@ pkgs: (with pkgs; [ zoxide #better ls eza + atuin # better cat bat