From 54d8dcbe1134c8ece383618e61ea75045849e2c5 Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Mon, 18 Mar 2024 20:45:03 -0500 Subject: [PATCH] fixed some broken stuff. --- README.md | 5 +- nix/home.nix | 12 +++- nix/justfile | 5 ++ nix/nushell/config.nu | 140 ++++++++++++++++++++++++++++++++++++++++++ nix/nushell/env.nu | 16 ++++- 5 files changed, 172 insertions(+), 6 deletions(-) create mode 100644 nix/justfile diff --git a/README.md b/README.md index 9b315d5..8621edf 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,9 @@ all of my dotfiles, managed with (https://www.gnu.org/software/stow/manual/stow. I am working on migrating my dotfiles to nix, to allow configuration and installation in a single step. In order to use the nix setup, you need to install nix and enable flakes, -then run `nix run --no-write-lock-file github:nix-community/home-manager/ -- --impure --flake . switch`, while in the nix directory. -from then on, you can update your configuration after making a change with `home-manager --impure --flake . switch` +then run `nix run --extra-experimental-features "nix-command flakes" --no-write-lock-file github:nix-community/home-manager/ -- --extra-experimental-features "nix-command flakes" --impure --flake . switch`, while in the nix directory. +from then on, you can update your configuration after making a change with `home-manager --impure --flake . switch`. +Alternatively, if you have `just` installed, you can use `just boostrap` and `just switch`, instead. ## Dependencies: This does not list the package manager dependencies of the programs the dotfiles are for, but any extra dependencies that are needed for the specific configuration. diff --git a/nix/home.nix b/nix/home.nix index 9fffd71..23ada25 100644 --- a/nix/home.nix +++ b/nix/home.nix @@ -15,6 +15,8 @@ in { home.packages = [ pkgs.zellij + pkgs.sshfs + ]; # Home Manager is pretty good at managing dotfiles. The primary way to manage @@ -25,16 +27,15 @@ in { }; home.sessionVariables = { - # EDITOR = "emacs"; EDITOR = "nvim"; VISUAL = "nvim"; }; home.sessionPath = [ + "$HOME/.nix-profile/bin/" "$HOME/.local/bin/" "$HOME/.cargo/bin/" "/opt/" - "$HOME/.nix-profile/bin/" ]; home.shellAliases = { @@ -219,6 +220,7 @@ in { }; }; + #sessionVariables, sessionPath and shellAliases are not applied to nushell. programs.nushell = { enable = true; configFile.source = lib.path.append dotfilesDirectory "nushell/config.nu"; @@ -258,4 +260,10 @@ in { # Let Home Manager install and manage itself. programs.home-manager.enable = true; + + # enable flakes + nix = { + package = pkgs.nix; + settings.experimental-features = [ "nix-command" "flakes" ]; + }; } diff --git a/nix/justfile b/nix/justfile new file mode 100644 index 0000000..42e4959 --- /dev/null +++ b/nix/justfile @@ -0,0 +1,5 @@ +switch: + home-manager --impure --flake . switch + +bootstrap: + nix run --extra-experimental-features "nix-command flakes" --no-write-lock-file github:nix-community/home-manager/ -- --extra-experimental-features "nix-command flakes" --impure --flake . switch diff --git a/nix/nushell/config.nu b/nix/nushell/config.nu index 7e11233..9aa3c17 100644 --- a/nix/nushell/config.nu +++ b/nix/nushell/config.nu @@ -2,6 +2,139 @@ # # version = "0.91.0" +# For more information on defining custom themes, see +# https://www.nushell.sh/book/coloring_and_theming.html +# And here is the theme collection +# https://github.com/nushell/nu_scripts/tree/main/themes +let dark_theme = { + # color for nushell primitives + separator: white + leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off + header: green_bold + empty: blue + # Closures can be used to choose colors for specific values. + # The value (in this case, a bool) is piped into the closure. + # eg) {|| if $in { 'light_cyan' } else { 'light_gray' } } + bool: light_cyan + int: white + filesize: cyan + duration: white + date: purple + range: white + float: white + string: white + nothing: white + binary: white + cell-path: white + row_index: green_bold + record: white + list: white + block: white + hints: dark_gray + search_result: {bg: red fg: white} + shape_and: purple_bold + shape_binary: purple_bold + shape_block: blue_bold + shape_bool: light_cyan + shape_closure: green_bold + shape_custom: green + shape_datetime: cyan_bold + shape_directory: cyan + shape_external: cyan + shape_externalarg: green_bold + shape_external_resolved: light_yellow_bold + shape_filepath: cyan + shape_flag: blue_bold + shape_float: purple_bold + # shapes are used to change the cli syntax highlighting + shape_garbage: { fg: white bg: red attr: b} + shape_globpattern: cyan_bold + shape_int: purple_bold + shape_internalcall: cyan_bold + shape_keyword: cyan_bold + shape_list: cyan_bold + shape_literal: blue + shape_match_pattern: green + shape_matching_brackets: { attr: u } + shape_nothing: light_cyan + shape_operator: yellow + shape_or: purple_bold + shape_pipe: purple_bold + shape_range: yellow_bold + shape_record: cyan_bold + shape_redirection: purple_bold + shape_signature: green_bold + shape_string: green + shape_string_interpolation: cyan_bold + shape_table: blue_bold + shape_variable: purple + shape_vardecl: purple +} + +let light_theme = { + # color for nushell primitives + separator: dark_gray + leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off + header: green_bold + empty: blue + # Closures can be used to choose colors for specific values. + # The value (in this case, a bool) is piped into the closure. + # eg) {|| if $in { 'dark_cyan' } else { 'dark_gray' } } + bool: dark_cyan + int: dark_gray + filesize: cyan_bold + duration: dark_gray + date: purple + range: dark_gray + float: dark_gray + string: dark_gray + nothing: dark_gray + binary: dark_gray + cell-path: dark_gray + row_index: green_bold + record: dark_gray + list: dark_gray + block: dark_gray + hints: dark_gray + search_result: {fg: white bg: red} + shape_and: purple_bold + shape_binary: purple_bold + shape_block: blue_bold + shape_bool: light_cyan + shape_closure: green_bold + shape_custom: green + shape_datetime: cyan_bold + shape_directory: cyan + shape_external: cyan + shape_externalarg: green_bold + shape_external_resolved: light_purple_bold + shape_filepath: cyan + shape_flag: blue_bold + shape_float: purple_bold + # shapes are used to change the cli syntax highlighting + shape_garbage: { fg: white bg: red attr: b} + shape_globpattern: cyan_bold + shape_int: purple_bold + shape_internalcall: cyan_bold + shape_keyword: cyan_bold + shape_list: cyan_bold + shape_literal: blue + shape_match_pattern: green + shape_matching_brackets: { attr: u } + shape_nothing: light_cyan + shape_operator: yellow + shape_or: purple_bold + shape_pipe: purple_bold + shape_range: yellow_bold + shape_record: cyan_bold + shape_redirection: purple_bold + shape_signature: green_bold + shape_string: green + shape_string_interpolation: cyan_bold + shape_table: blue_bold + shape_variable: purple + shape_vardecl: purple +} let fish_completer = {|spans| fish --command $'complete "--do-complete=($spans | str join " ")"' @@ -726,6 +859,13 @@ alias la = ls -a alias ll = ls -l alias lla = ls -la alias pyactivate = overlay use ./.venv/bin/activate +alias say = espeak -p 10 -s 150 -a 200 +alias tmux = tmux -u +alias pdfmk = latexmk -lualatex -pvc +# converts all .doc and .docx files in the local directory to pdfs using libreoffice +alias doc2pdf = loffice --convert-to pdf --headless *.docx +#common options for sshfs +alias sshmnt = sshfs -o idmap=user,compression=no,reconnect,follow_symlinks,dir_cache=yes,ServerAliveInterval=15 # display a slideshow of all pics in a directory, recursively def slideshow [delay: int = 10] { diff --git a/nix/nushell/env.nu b/nix/nushell/env.nu index 2592994..cce1eff 100644 --- a/nix/nushell/env.nu +++ b/nix/nushell/env.nu @@ -89,6 +89,10 @@ def is-installed [ app: string ] { ((which $app | length) > 0) } +const conditional_config = ($nu.temp-path | path join 'conditional-config.nu') +'# This file is an ugly hack to conditionally source files and define aliases/custom commands. +' | save --force $conditional_config + # To add entries to PATH (on Windows you might use Path), you can use the following pattern: # $env.PATH = ($env.PATH | split row (char esep) | prepend '/some/path') # $env.PATH = ($env.PATH | split row (char esep) | append ($nu.home-path | path join ".local/bin/")) @@ -96,8 +100,16 @@ def is-installed [ app: string ] { # $env.PATH = ($env.PATH | split row (char esep) | append ($nu.home-path | path join "opt")) # An alternate way to add entries to $env.PATH is to use the custom command `path add` # which is built into the nushell stdlib: -# use std "path add" -# $env.PATH = ($env.PATH | split row (char esep)) +use std "path add" +$env.PATH = ($env.PATH | split row (char esep)) +path add ($env.HOME | path join ".cargo " "bin") +path add ($env.HOME | path join ".local" "bin") +path add ($env.HOME | path join ".nix-profile" "bin") +path add ('/opt') +$env.PATH = ($env.PATH | uniq) + +$env.EDITOR = nvim +$env.VISUAL = nvim ls (($nu.default-config-dir | path join ('scripts/**/*.nu')) | into glob) | each { |it| $"source ($it.name)\n" | save --append $conditional_config} | ignore