From cdf14bd46185726e4fbc7374cef4e2ea485c1244 Mon Sep 17 00:00:00 2001 From: Dennis Schoepf Date: Mon, 24 Nov 2025 00:47:40 +0100 Subject: [PATCH] wip: dnsc-machine setup --- :w | 182 +++++++++++++++++++++++++++++++++ flake.nix | 1 + home/linux.nix | 1 + modules/fish/default.nix | 2 +- modules/wm/ironbar/default.nix | 43 ++++++++ 5 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 :w create mode 100644 modules/wm/ironbar/default.nix diff --git a/:w b/:w new file mode 100644 index 0000000..a11adcb --- /dev/null +++ b/:w @@ -0,0 +1,182 @@ +{ config, pkgs, ... }: + +{ + programs.fish = { + enable = true; + + functions = { + dbui = '' + nvim +"DBUI" + ''; + ff = '' + bash ${./ff.bash} + ''; + envsource = '' + for line in (cat $argv | grep -v '^#') + set item (string split -m 1 '=' $line) + set -gx $item[1] $item[2] + end + ''; + fish_greeting = "fortune -a"; + resize_images = /* fish */ '' + # Resize all JPG images in the current directory and its subdirectories + # Usage: resize_images [percentage] + # Example: resize_images 20 - resizes all images to 20% of original size + # If no percentage is provided, defaults to 40% + + set -l percentage $argv[1] + if test -z "$percentage" + set percentage 40 + end + + for img in (find . -type f -name "*.JPG") + set original_size (stat -f %z "$img") + magick convert "$img" -resize "$percentage%" "$img" + set new_size (stat -f %z "$img") + echo "Processed $img" + echo "Original size: $original_size bytes" + echo "New size: $new_size bytes" + echo "---" + end + ''; + localip = "ifconfig | grep \"inet \" | grep -v 127.0.0.1 | awk '{print $2}' | head -n 1"; + publicip = "curl -4 ifconfig.me"; + fzf = '' + set -Ux FZF_DEFAULT_OPTS " + --color=fg:#ffffff,bg:#0d0e1c,hl:#ef8386 + --color=fg+:#ffffff,bg+:#1d2235,hl+:#ef8386 + --color=border:#61647a,header:#88ca9f,gutter:#0d0e1c + --color=spinner:#fec43f,info:#00bcff + --color=pointer:#feacd0,marker:#ff5f59,prompt:#9ac8e0" + + command fzf + ''; + nn = '' + # Require a title argument + if test (count $argv) -lt 1 + echo "Usage: nn \"My Note\"" + return 1 + end + + # Join all arguments into single title (preserves spaces inside quotes) + set -l title $argv[1] + + # Timestamp up to minutes, format: YYYY-MM-DD_HH-MM + set -l ts (date "+%Y%m%d%H%M") + + # Normalize title: lowercase, replace spaces with hyphens, remove/replace + # characters unsafe for filenames (keep a-z0-9- and replace others with -) + set -l slug (string lower -- $title) + # Replace any sequence of non-alphanumeric characters with single hyphen + set -l slug (echo $slug | sed -E 's/[^a-z0-9]+/-/g' | sed -E 's/^-|-$//g') + + # Compose filename + set -l filename "$ts"_"$slug.md" + + # Directory for notes (change if you prefer another path) + set -l notes_dir ~/notes + + # Ensure directory exists + test -d $notes_dir; or mkdir -p $notes_dir + + # Full path + set -l fullpath "$notes_dir/$filename" + + # If file doesn't exist, create with timestamp and title at top + if not test -f $fullpath + # Human-friendly timestamp line (no seconds) + set -l display_ts (date "+%Y-%m-%d %H:%M") + printf "---\nCREATED_AT: %s\n---\n\n# %s\n\n" "$display_ts" "$title" > $fullpath + end + + # Open file in neovim + nvim $fullpath + ''; + fish_mode_prompt = '' + switch $fish_bind_mode + case default + set_color --bold brcyan + echo '[N] ' + case insert + set_color --bold brgreen + echo '[I] ' + case replace_one + set_color --bold yellow + echo '[R] ' + case replace + set_color --bold bryellow + echo '[R] ' + case visual + set_color --bold brmagenta + echo '[V] ' + case '*' + set_color --bold red + echo '[?] ' + end + set_color normal + ''; + }; + + interactiveShellInit = '' + set hn (prompt_hostname) + set fish_cursor_default block blink + + fish_vi_key_bindings insert + + # Custom Colorscheme + set --universal fish_color_autosuggestion brblack # autosuggestions + set --universal fish_color_command brwhite # commands + set --universal fish_color_comment brblack # code comments + set --universal fish_color_cwd brblack # current working directory in the default prompt + set --universal fish_color_end brblack # process separators like ';' and '&' + set --universal fish_color_error brwhite # highlight potential errors + set --universal fish_color_escape brblack # highlight character escapes like '\n' and '\x70' + set --universal fish_color_match yellow # highlight matching parenthesis + set --universal fish_color_normal brwhite # default color + set --universal fish_color_operator brblack # parameter expansion operators like '*' and '~' + set --universal fish_color_param bryellow # regular command parameters + set --universal fish_color_quote brmagenta # quoted blocks of text + set --universal fish_color_redirection brwhite # IO redirections + set --universal fish_color_search --bold --background=black --foreground=bryellow + set --universal fish_color_search_match --background black # highlight history search matches and the selected pager item (must be a background) + set --universal fish_pager_color_selected_background --background black --foreground brmagenta + set --universal fish_pager_color_progress --foreground=brwhite --background=black + set --universal fish_color_selection --background magenta # when selecting text (in vi visual mode) + set --universal fish_color_cancel brblack # the '^C' indicator on a canceled command + set --universal fish_color_host brwhite # current host system in some of fish default prompts + set --universal fish_color_host_remote yellow #ayu:syntax.constant current host system in some of fish default prompts, if fish is running remotely (via ssh or similar) + set --universal fish_color_user brwhite # current username in some of fish default prompts + + set -x GPG_TTY (tty) + fish_add_path /run/wrappers/bin + fish_add_path /run/current-system/sw/bin + + switch (uname) + case Darwin + fish_add_path /opt/homebrew/bin + if test -d (brew --prefix)"/share/fish/completions" + set -p fish_complete_path (brew --prefix)/share/fish/completions + end + if test -d (brew --prefix)"/share/fish/vendor_completions.d" + set -p fish_complete_path (brew --prefix)/share/fish/vendor_completions.d + end + end + + envsource ~/.env + + zoxide init fish | source + direnv hook fish | source + fnm env --use-on-cd --shell fish | source + + # Temporary fix because of https://github.com/atuinsh/atuin/issues/2803 + # atuin init fish | sed 's/-k up/up/' | source + ''; + + shellAbbrs = { + lg = "nvim +Neogit"; + gg = "nvim +Neogit"; + g = "git"; + frc = "source ~/.config/fish/**/*.fish"; + }; + }; +} diff --git a/flake.nix b/flake.nix index 11bf155..7af514a 100644 --- a/flake.nix +++ b/flake.nix @@ -12,6 +12,7 @@ nix-darwin.inputs.nixpkgs.follows = "nixpkgs"; ip-whitelist.url = "github:Oak-Digital/nixos-ip-whitelist-firewall"; nix-homebrew.url = "github:zhaofengli/nix-homebrew"; + inputs.ironbar.url = "github:JakeStanger/ironbar"; }; outputs = diff --git a/home/linux.nix b/home/linux.nix index 908ce93..1875449 100644 --- a/home/linux.nix +++ b/home/linux.nix @@ -48,6 +48,7 @@ ../modules/wm/swaync ../modules/wm/awww ../modules/wm/fuzzel + ../modules/wm/ironbar ../modules/wm/niri ]; diff --git a/modules/fish/default.nix b/modules/fish/default.nix index 358ebd9..bc8326b 100644 --- a/modules/fish/default.nix +++ b/modules/fish/default.nix @@ -5,7 +5,7 @@ enable = true; functions = { - dbui = '' + dbui = /*fish */ '' nvim +"DBUI" ''; ff = '' diff --git a/modules/wm/ironbar/default.nix b/modules/wm/ironbar/default.nix new file mode 100644 index 0000000..a94734e --- /dev/null +++ b/modules/wm/ironbar/default.nix @@ -0,0 +1,43 @@ +{ pkgs, ... }: + +{ + programs.ironbar = { + enable = true; + systemd = true; + config = { + # An example: + monitors = { + DP-3 = { + anchor_to_edges = true; + position = "left"; + height = 16; + start = [ + { type = "workspaces"; } + ]; + center = [ + { type = "focused"; } + ]; + end = [ + { type = "volume"; } + { + type = "tray"; + icon_size = 16; + } + { type = "clock"; } + ]; + }; + }; + }; + style = /* css */ '' + /* An example */ + * { + /* font-family: Noto Sans Nerd Font, sans-serif; */ + font-size: 14px; + border: none; + border-radius: 0; + } + ''; + package = inputs.ironbar; + features = ["feature" "another_feature"]; + }; +}