From aab1d4ff96a543caafc00e41810ca6dee2a3930c Mon Sep 17 00:00:00 2001 From: h7x4 Date: Wed, 8 Dec 2021 16:26:56 +0100 Subject: [PATCH] Add nix home-manager config --- nixpkgs/common/colors.nix | 30 + nixpkgs/config.nix | 5 + nixpkgs/home.nix | 230 +++++++ nixpkgs/programs/alacritty.nix | 29 + nixpkgs/programs/comma.nix | 14 + nixpkgs/programs/emacs.nix | 25 + nixpkgs/programs/gh.nix | 11 + nixpkgs/programs/git.nix | 82 +++ nixpkgs/programs/ncmpcpp.nix | 338 ++++++++++ nixpkgs/programs/neovim.nix | 34 + nixpkgs/programs/newsboat.nix | 62 ++ nixpkgs/programs/rofi.nix | 35 ++ nixpkgs/programs/tmux.nix | 100 +++ .../programs/vscode-extensions/noop-syslog.c | 1 + .../vscode-extensions/vsliveshare.nix | 124 ++++ nixpkgs/programs/vscode.nix | 585 ++++++++++++++++++ nixpkgs/programs/zathura.nix | 26 + nixpkgs/programs/zsh.nix | 192 ++++++ nixpkgs/services/mpd.nix | 8 + nixpkgs/services/picom.nix | 34 + nixpkgs/services/stalonetray.nix | 21 + nixpkgs/services/sxhkd.nix | 77 +++ 22 files changed, 2063 insertions(+) create mode 100644 nixpkgs/common/colors.nix create mode 100644 nixpkgs/config.nix create mode 100644 nixpkgs/home.nix create mode 100644 nixpkgs/programs/alacritty.nix create mode 100644 nixpkgs/programs/comma.nix create mode 100644 nixpkgs/programs/emacs.nix create mode 100644 nixpkgs/programs/gh.nix create mode 100644 nixpkgs/programs/git.nix create mode 100644 nixpkgs/programs/ncmpcpp.nix create mode 100644 nixpkgs/programs/neovim.nix create mode 100644 nixpkgs/programs/newsboat.nix create mode 100644 nixpkgs/programs/rofi.nix create mode 100644 nixpkgs/programs/tmux.nix create mode 100644 nixpkgs/programs/vscode-extensions/noop-syslog.c create mode 100644 nixpkgs/programs/vscode-extensions/vsliveshare.nix create mode 100644 nixpkgs/programs/vscode.nix create mode 100644 nixpkgs/programs/zathura.nix create mode 100644 nixpkgs/programs/zsh.nix create mode 100644 nixpkgs/services/mpd.nix create mode 100644 nixpkgs/services/picom.nix create mode 100644 nixpkgs/services/stalonetray.nix create mode 100644 nixpkgs/services/sxhkd.nix diff --git a/nixpkgs/common/colors.nix b/nixpkgs/common/colors.nix new file mode 100644 index 0000000..bbf8400 --- /dev/null +++ b/nixpkgs/common/colors.nix @@ -0,0 +1,30 @@ +rec { + monokai = rec { + foreground = white; + background = black; + black = "#272822"; + red = "#f92672"; + green = "#a6e22e"; + yellow = "#f4bf75"; + blue = "#66d9ef"; + magenta = "#ae81ff"; + cyan = "#a1efe4"; + white = "#f8f8f2"; + }; + + paper = { + background = "#f2e3bd"; + foreground = "#2f343f"; + black = "#222222"; + red = "#C30771"; + green = "#10A778"; + yellow = "#A89C14"; + blue = "#008ec4"; + magenta = "#523C79"; + cyan = "#20A5BA"; + white = "#f7f3ee"; + }; + + default = monokai; +} + diff --git a/nixpkgs/config.nix b/nixpkgs/config.nix new file mode 100644 index 0000000..0b84d86 --- /dev/null +++ b/nixpkgs/config.nix @@ -0,0 +1,5 @@ +{ ... }: +{ + allowUnfree = true; + android_sdk.accept_license = true; +} diff --git a/nixpkgs/home.nix b/nixpkgs/home.nix new file mode 100644 index 0000000..f2134fa --- /dev/null +++ b/nixpkgs/home.nix @@ -0,0 +1,230 @@ +{ lib, pkgs, ... } @ args: + +let + colorType = with lib.types; (attrsOf str); + + colorTheme = import ./common/colors.nix; +in +{ + _module.args.colorTheme = colorTheme; + + imports = [ + ./programs/alacritty.nix + ./programs/comma.nix + ./programs/emacs.nix + ./programs/gh.nix + ./programs/git.nix + ./programs/ncmpcpp.nix + ./programs/neovim.nix + ./programs/newsboat.nix + ./programs/rofi.nix + ./programs/tmux.nix + ./programs/vscode.nix + ./programs/zathura.nix + ./programs/zsh.nix + ]; + + xsession = { + pointerCursor = { + package = pkgs.capitaine-cursors; + name = "capitaine-cursors"; + size = 16; + }; + }; + + programs = { + home-manager.enable = true; + + bat.enable = true; + + # bottom.enable = true; + + exa.enable = true; + + feh.enable = true; + + fzf = { + enable = true; + defaultCommand = "fd --type f"; + }; + + gpg.enable = true; + irssi.enable = true; + lazygit.enable = true; + mpv.enable = true; + + man = { + enable = true; + generateCaches = true; + }; + + obs-studio.enable = true; + + qutebrowser = { + enable = true; + aliases = {}; + searchEngines = {}; + settings = {}; + keyBindings = {}; + # quickmarks = {}; + extraConfig = ''''; + }; + + skim = { + enable = true; + defaultCommand ="fd --type f"; + }; + + texlive = { + enable = true; + # packageSet = pkgs.texlive.combined.scheme-medium; + }; + + # xmobar.enable = true; + + zoxide.enable = true; + }; + + services.mpd = import ./services/mpd.nix args; + services.picom = import ./services/picom.nix; + services.stalonetray = import ./services/stalonetray.nix (args // { inherit colorTheme; }); + services.sxhkd = import ./services/sxhkd.nix args; + + + home = { + stateVersion = "21.05"; + username = "h7x4"; + homeDirectory = "/home/h7x4"; + packages = with pkgs; [ + ahoviewer + anki + asciidoctor + audacity + beets + calibre + castnow + citra + copyq + czkawka + desmume + discord + diskonaut + diskus + docker + du-dust + fcitx + fd + ffmpeg + geogebra + google-chrome + # gpgtui + # hck + hexyl + imagemagick + inkscape + insomnia + jq + kepubify + kid3 + koreader + krita + ktouch + lastpass-cli + lazydocker + libreoffice-fresh + lolcat + maim + mdcat + mdp + mediainfo + megacmd + megasync + micro + minecraft + mkvtoolnix + mmv + mopidy + mopidy-mpd + mopidy-soundcloud + mopidy-spotify + mopidy-youtube + mpc_cli + mps-youtube + neofetch + nmap + nyxt + osu-lazer + pandoc + pulseaudio + pulsemixer + python3 + ripgrep + rsync + sc-im + scrcpy + slack + slack-term + # steam-tui + sxiv + tagainijisho + taisei + tealdeer + teams + # tenacity + # tv-renamer + toilet + tokei + touchegg + w3m + waifu2x-converter-cpp + wavemon + xcalib + xclip + xdotool + youtube-dl + # yuzu-mainline + zeal + zoom-us + zotero + + # Needed for VSCode liveshare + desktop-file-utils + krb5 + zlib + icu + openssl + xorg.xprop + ]; + }; + + services.gnome-keyring.enable = true; + + services.dropbox.enable = true; + services.dunst = { + enable = true; + iconTheme = { + package = pkgs.gnome.adwaita-icon-theme; + name = "Adwaita"; + size = "32x32"; + }; + settings = { + global = { + geometry = "300x5-30+50"; + transparency = 10; + frame_color = "#eceff1"; + font = "Droid Sans 9"; + }; + urgency_normal = { + background = "#37474f"; + foreground = "#eceff1"; + timeout = 10; + }; + }; + }; + + services.network-manager-applet.enable = true; + + # services.redshift.enable = true; + +} + diff --git a/nixpkgs/programs/alacritty.nix b/nixpkgs/programs/alacritty.nix new file mode 100644 index 0000000..e0168b2 --- /dev/null +++ b/nixpkgs/programs/alacritty.nix @@ -0,0 +1,29 @@ +{ lib, pkgs, colorTheme, ... }: +{ + programs.alacritty = { enable = true; settings = { window.padding = { x = 15; y = 15; }; font = { normal = { family = "Fira Code"; style = "Retina"; }; bold.family = "Fira Code"; italic.family = "Fira Code"; size = 12.0; }; + colors = + let + pColors = [ "foreground" "background" ]; + in + { + primary = lib.attrsets.getAttrs pColors colorTheme.default; + normal = lib.attrsets.filterAttrs (n: v: pColors ? n) colorTheme.default; + }; + + background_opacity = 1.0; + + cursor = { + style = "Block"; + blinking = "On"; + unfocused_hollow = true; + }; + + live_config_reload = true; + + shell = { + program = "${pkgs.zsh}/bin/zsh"; + args = [ "--login" ]; + }; + }; + }; +} diff --git a/nixpkgs/programs/comma.nix b/nixpkgs/programs/comma.nix new file mode 100644 index 0000000..45b261e --- /dev/null +++ b/nixpkgs/programs/comma.nix @@ -0,0 +1,14 @@ +{ config, pkgs, ... }: +let + comma = import ( pkgs.fetchFromGitHub { + owner = "Shopify"; + repo = "comma"; + rev = "4a62ec17e20ce0e738a8e5126b4298a73903b468"; + sha256 = "0n5a3rnv9qnnsrl76kpi6dmaxmwj1mpdd2g0b4n1wfimqfaz6gi1"; + }) {}; +in +{ + home.packages = with pkgs; [ + comma + ]; +} diff --git a/nixpkgs/programs/emacs.nix b/nixpkgs/programs/emacs.nix new file mode 100644 index 0000000..e5ea286 --- /dev/null +++ b/nixpkgs/programs/emacs.nix @@ -0,0 +1,25 @@ +{ ... }: +{ + programs.emacs = { + enable = true; + # socketActivation.enable = true; + extraPackages = epkgs: with epkgs; [ + # package + use-package + evil + evil-collection + evil-nerd-commenter + # org + evil-org + monokai-theme + gruber-darker-theme + company + flycheck + projectile + yasnippet + magit + # recentf + which-key + ]; + }; +} diff --git a/nixpkgs/programs/gh.nix b/nixpkgs/programs/gh.nix new file mode 100644 index 0000000..7348813 --- /dev/null +++ b/nixpkgs/programs/gh.nix @@ -0,0 +1,11 @@ +{ ... }: +{ + programs.gh = { + enable = true; + gitProtocol = "ssh"; + aliases = { + co = "pr checkout"; + pv = "pr view"; + }; + }; +} diff --git a/nixpkgs/programs/git.nix b/nixpkgs/programs/git.nix new file mode 100644 index 0000000..0a759f7 --- /dev/null +++ b/nixpkgs/programs/git.nix @@ -0,0 +1,82 @@ +{pkgs, ...}: +{ + programs.git = { + enable = true; + package = pkgs.gitFull; + + userName = "h7x4"; + userEmail = "h7x4abk3g@protonmail.com"; + + aliases = { + aliases = "!git config --get-regexp alias | sed -re 's/alias\\.(\\S*)\\s(.*)$/\\1 = \\2/g'"; + uncommit = "reset --soft HEAD^"; + rev = "checkout HEAD -- "; + revall = "checkout ."; + # unstage = "rm --cached "; + unstage = "restore --staged "; + delete-merged = "!git branch --merged | grep -v '\\*' | xargs -n 1 git branch -d"; + + mkbr = "checkout -b"; + mvbr = "branch -m"; + rmbr = "branch -d"; + rrmbr = "push origin --delete"; + + graph = "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all"; + graphv = "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all"; + g = "!git graph"; + }; + + extraConfig = { + core = { + whitespace = "space-before-tab,-indent-with-non-tab,trailing-space"; + + precomposeunicode = false; + untrackedCache = true; + + editor = "nvim"; + pager = "less"; + }; + + "color \"branch\"".upstream = "cyan"; + color.ui = "auto"; + + init.defaultBranch = "main"; + fetch.prune = true; + pull.rebase = true; + push.default = "current"; + + merge = { + tool = "nvimdiff"; + conflictstyle = "diff3"; + colorMoved = "zebra"; + }; + + mergetool.keepBackup = false; + "mergetool \"nvimdiff\"".cmd = "nvim -d $BASE $LOCAL $REMOTE $MERGED -c '$wincmd w' -c 'wincmd J'"; + + diff = { + mnemonicPrefix = true; + renames = true; + tool = "nvimdiff"; + }; + + grep = { + break = true; + heading= true; + lineNumber = true; + extendedRegexp = true; + }; + + github.user = "h7x4abk3g"; + + web.browser = "google-chrome-stable"; + + "filter \"lfs\"" = { + required = true; + smudge = "git-lfs smudge -- %f"; + process = "git-lfs filter-process"; + clean = "git-lfs clean -- %f"; + }; + }; + }; +} diff --git a/nixpkgs/programs/ncmpcpp.nix b/nixpkgs/programs/ncmpcpp.nix new file mode 100644 index 0000000..895acf9 --- /dev/null +++ b/nixpkgs/programs/ncmpcpp.nix @@ -0,0 +1,338 @@ +{pkgs, ...}: +{ + programs.ncmpcpp = { + enable = true; + package = pkgs.ncmpcpp.override { visualizerSupport = true; }; + + bindings = [ + # { key = "j"; command = "scroll_down"; } + { key = "mouse"; command = "mouse_event"; } + + { key = "up"; command = "scroll_up"; } + { key = "shift-up"; command = ["select_item" "scroll_up"]; } + + { key = "down"; command = "scroll_down"; } + { key = "shift-down"; command = ["select_item" "scroll_down"]; } + + { key = "["; command = "scroll_up_album"; } + { key = "]"; command = "scroll_down_album"; } + { key = "{"; command = "scroll_up_artist"; } + { key = "}"; command = "scroll_down_artist"; } + + { key = "page_up"; command = "page_up"; } + { key = "page_down"; command = "page_down"; } + + { key = "home"; command = "move_home"; } + { key = "end"; command = "move_end"; } + { key = "insert"; command = "select_item"; } + + { key = "enter"; command = "enter_directory"; } + { key = "enter"; command = "toggle_output"; } + { key = "enter"; command = "run_action"; } + { key = "enter"; command = "play_item"; } + + { key = "space"; command = "add_item_to_playlist"; } + { key = "space"; command = "toggle_lyrics_update_on_song_change"; } + { key = "space"; command = "toggle_visualization_type"; } + + #CHANGE + { key = "d"; command = "delete_playlist_items"; } + + { key = "delete"; command = "delete_browser_items"; } + { key = "delete"; command = "delete_stored_playlist"; } + + { key = "right"; command = "next_column"; } + { key = "right"; command = "slave_screen"; } + { key = "right"; command = "volume_up"; } + { key = "+"; command = "volume_up"; } + + { key = "left"; command = "previous_column"; } + { key = "left"; command = "master_screen"; } + { key = "left"; command = "volume_down"; } + { key = "-"; command = "volume_down"; } + + { key = ":"; command = "execute_command"; } + { key = "tab"; command = "next_screen"; } + { key = "shift-tab"; command = "previous_screen"; } + { key = "f1"; command = "show_help"; } + + { key = "1"; command = "show_playlist"; } + { key = "2"; command = "show_browser"; } + { key = "2"; command = "change_browse_mode"; } + { key = "3"; command = "show_search_engine"; } + { key = "3"; command = "reset_search_engine"; } + { key = "4"; command = "show_media_library"; } + { key = "4"; command = "toggle_media_library_columns_mode"; } + { key = "5"; command = "show_playlist_editor"; } + { key = "6"; command = "show_tag_editor"; } + { key = "7"; command = "show_outputs"; } + { key = "8"; command = "show_visualizer"; } + { key = "="; command = "show_clock"; } + { key = "@"; command = "show_server_info"; } + + { key = "s"; command = "stop"; } + { key = "p"; command = "pause"; } + { key = ">"; command = "next"; } + { key = "<"; command = "previous"; } + + { key = "ctrl-h"; command = "jump_to_parent_directory"; } + { key = "ctrl-h"; command = "replay_song"; } + { key = "backspace"; command = "jump_to_parent_directory"; } + { key = "backspace"; command = "replay_song"; } + + { key = "f"; command = "seek_forward"; } + { key = "b"; command = "seek_backward"; } + + { key = "r"; command = "toggle_repeat"; } + { key = "z"; command = "toggle_random"; } + { key = "y"; command = "save_tag_changes"; } + { key = "y"; command = "start_searching"; } + { key = "y"; command = "toggle_single"; } + { key = "R"; command = "toggle_consume"; } + { key = "Y"; command = "toggle_replay_gain_mode"; } + { key = "T"; command = "toggle_add_mode"; } + { key = "|"; command = "toggle_mouse"; } + { key = "#"; command = "toggle_bitrate_visibility"; } + { key = "Z"; command = "shuffle"; } + { key = "x"; command = "toggle_crossfade"; } + { key = "X"; command = "set_crossfade"; } + { key = "u"; command = "update_database"; } + { key = "ctrl-s"; command = "sort_playlist"; } + { key = "ctrl-s"; command = "toggle_browser_sort_mode"; } + { key = "ctrl-s"; command = "toggle_media_library_sort_mode"; } + { key = "ctrl-r"; command = "reverse_playlist"; } + { key = "ctrl-f"; command = "apply_filter"; } + { key = "ctrl-_"; command = "select_found_items"; } + { key = "/"; command = "find"; } + { key = "/"; command = "find_item_forward"; } + { key = "?"; command = "find"; } + { key = "?"; command = "find_item_backward"; } + { key = "."; command = "next_found_item"; } + { key = ","; command = "previous_found_item"; } + { key = "w"; command = "toggle_find_mode"; } + { key = "e"; command = "edit_song"; } + { key = "e"; command = "edit_library_tag"; } + { key = "e"; command = "edit_library_album"; } + { key = "e"; command = "edit_directory_name"; } + { key = "e"; command = "edit_playlist_name"; } + { key = "e"; command = "edit_lyrics"; } + { key = "i"; command = "show_song_info"; } + { key = "I"; command = "show_artist_info"; } + { key = "g"; command = "jump_to_position_in_song"; } + { key = "l"; command = "show_lyrics"; } + { key = "ctrl-v"; command = "select_range"; } + { key = "v"; command = "reverse_selection"; } + { key = "V"; command = "remove_selection"; } + { key = "B"; command = "select_album"; } + { key = "a"; command = "add_selected_items"; } + { key = "c"; command = "clear_playlist"; } + { key = "c"; command = "clear_main_playlist"; } + { key = "C"; command = "crop_playlist"; } + { key = "C"; command = "crop_main_playlist"; } + { key = "m"; command = "move_sort_order_up"; } + { key = "m"; command = "move_selected_items_up"; } + { key = "n"; command = "move_sort_order_down"; } + { key = "n"; command = "move_selected_items_down"; } + { key = "M"; command = "move_selected_items_to"; } + { key = "A"; command = "add"; } + { key = "S"; command = "save_playlist"; } + { key = "o"; command = "jump_to_playing_song"; } + { key = "G"; command = "jump_to_browser"; } + { key = "G"; command = "jump_to_playlist_editor"; } + { key = "~"; command = "jump_to_media_library"; } + { key = "E"; command = "jump_to_tag_editor"; } + { key = "U"; command = "toggle_playing_song_centering"; } + { key = "P"; command = "toggle_display_mode"; } + { key = "\\\\"; command = "toggle_interface"; } + { key = "!"; command = "toggle_separators_between_albums"; } + { key = "L"; command = "toggle_lyrics_fetcher"; } + { key = "F"; command = "fetch_lyrics_in_background"; } + { key = "alt-l"; command = "toggle_fetching_lyrics_in_background"; } + { key = "ctrl-l"; command = "toggle_screen_lock"; } + { key = "`"; command = "toggle_library_tag_type"; } + { key = "`"; command = "refetch_lyrics"; } + { key = "`"; command = "add_random_items"; } + { key = "ctrl-p"; command = "set_selected_items_priority"; } + { key = "q"; command = "quit"; } + + # the t key isn't used and it's easier to press than /, so lets use it + { key = "t"; command = "find"; } + { key = "t"; command = "find_item_forward"; } + + { key = "+"; command = "show_clock"; } + { key = "="; command = "volume_up"; } + + { key = "j"; command = "scroll_down"; } + { key = "k"; command = "scroll_up"; } + + { key = "ctrl-u"; command = "page_up"; } + #push_characters "kkkkkkkkkkkkkkk" + { key = "ctrl-d"; command = "page_down"; } + #push_characters "jjjjjjjjjjjjjjj" + + { key = "h"; command = "previous_column"; } + { key = "l"; command = "next_column"; } + + { key = "."; command = "show_lyrics"; } + + { key = "n"; command = "next_found_item"; } + { key = "N"; command = "previous_found_item"; } + + # not used but bound + { key = "J"; command = "move_sort_order_down"; } + { key = "K"; command = "move_sort_order_up"; } + ]; + + settings = { + lyrics_directory = "~/music/.lyrics"; + + playlist_disable_highlight_delay = 0; + message_delay_time = 5; + + # - 0 - default window color (discards all other colors) + # - 1 - black + # - 2 - red + # - 3 - green + # - 4 - yellow + # - 5 - blue + # - 6 - magenta + # - 7 - cyan + # - 8 - white + # - 9 - end of current color + # - b - bold text + # - u - underline text + # - r - reverse colors + # - a - use alternative character set + + song_list_format = "{%a - }{%t}|{$8%f$9}$R{$3(%l)$9}"; + song_status_format = "{{%a{ \"%b\"{ (%y)}} - }{%t}}|{%f}"; + song_library_format = "{%n - }{%t}|{%f}"; + alternative_header_first_line_format = "$b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b"; + alternative_header_second_line_format = "{{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D}"; + current_item_prefix = "$(yellow)$r"; + current_item_suffix = "$/r$(end)"; + current_item_inactive_column_prefix = "$(white)$r"; + current_item_inactive_column_suffix = "$/r$(end)"; + now_playing_prefix = "$b"; + now_playing_suffix = "$/b"; + browser_playlist_prefix = "$2playlist$9 "; + selected_item_prefix = "$6"; + selected_item_suffix = "$9"; + modified_item_prefix = "$3> $9"; + + song_window_title_format = "{%a - }{%t}|{%f}"; + + browser_sort_mode = "name"; + browser_sort_format = "{%a - }{%t}|{%f} {(%l)}"; + + song_columns_list_format = "(10)[green]{a} (50)[white]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l}"; + # song_columns_list_format = "(10)[green]{a} (50)[black]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l}"; + + execute_on_song_change = ""; + + execute_on_player_state_change = ""; + playlist_show_mpd_host = "no"; + playlist_show_remaining_time = "no"; + playlist_shorten_total_times = "no"; + playlist_separate_albums = "no"; + + playlist_display_mode = "columns"; + browser_display_mode = "classic"; + search_engine_display_mode = "classic"; + playlist_editor_display_mode = "classic"; + discard_colors_if_item_is_selected = "yes"; + show_duplicate_tags = "yes"; + incremental_seeking = "yes"; + seek_time = 1; + volume_change_step = 2; + autocenter_mode = "no"; + centered_cursor = "no"; + + progressbar_look = "─⊙╶"; + # progressbar_look = "◾◾◽"; + # progressbar_look = "=> "; + + default_place_to_search_in = "database"; + user_interface = "classic"; + data_fetching_delay = "yes"; + media_library_primary_tag = "artist"; + media_library_albums_split_by_date = "yes"; + default_find_mode = "wrapped"; + default_tag_editor_pattern = "%n - %t"; + header_visibility = "yes"; + statusbar_visibility = "yes"; + titles_visibility = "yes"; + header_text_scrolling = "yes"; + cyclic_scrolling = "no"; + lines_scrolled = 2; + + # lyrics_fetchers = "azlyrics, genius, sing365, lyricsmania, metrolyrics, justsomelyrics, jahlyrics, plyrics, tekstowo, internet"; + follow_now_playing_lyrics = "no"; + fetch_lyrics_for_current_song_in_background = "no"; + store_lyrics_in_song_dir = "no"; + generate_win32_compatible_filenames = "yes"; + allow_for_physical_item_deletion = "no"; + + lastfm_preferred_language = "en"; + space_add_mode = "add_remove"; + show_hidden_files_in_local_browser = "no"; + + screen_switcher_mode = "playlist, browser"; + startup_screen = "playlist"; + startup_slave_screen = ""; + startup_slave_screen_focus = "no"; + + locked_screen_width_part = "50"; + ask_for_locked_screen_width_part = "yes"; + jump_to_now_playing_song_at_start = "yes"; + ask_before_clearing_playlists = "yes"; + clock_display_seconds = "no"; + display_volume_level = "yes"; + display_bitrate = "yes"; + display_remaining_time = "no"; + + ignore_leading_the = "no"; + + ignore_diacritics = "no"; + block_search_constraints_change_if_items_found = "yes"; + mouse_support = "yes"; + mouse_list_scroll_whole_page = "yes"; + empty_tag_marker = ""; + tags_separator = " | "; + tag_editor_extended_numeration = "no"; + media_library_sort_by_mtime = "no"; + enable_window_title = "no"; + + search_engine_default_search_mode = 1; + external_editor = "vim"; + use_console_editor = "yes"; + + colors_enabled = "yes"; + empty_tag_color = "cyan"; + header_window_color = "cyan"; + volume_color = "red"; + state_line_color = "yellow"; + state_flags_color = "red"; + # This one is probably the one you're looking for + main_window_color = "white"; + # main_window_color = "black"; + color1 = "white"; + color2 = "green"; + progressbar_color = "yellow"; + progressbar_elapsed_color = "green:b"; + statusbar_color = "cyan"; + statusbar_time_color = "default:b"; + player_state_color = "default:b"; + alternative_ui_separator_color = "black:b"; + window_border_color = "green"; + active_window_border = "red"; + + # visualizer_fifo_path = "/tmp/mpd.fifo"; + # visualizer_output_name = "my_fifo"; + # visualizer_sync_interval = "30"; + # visualizer_in_stereo = "no"; + # visualizer_type = "spectrum"; # spectrum, ellipse, wave_filled, wave + # visualizer_look = "+█"; # wave | spectrum, ellipse, wave_filled + }; + }; +} diff --git a/nixpkgs/programs/neovim.nix b/nixpkgs/programs/neovim.nix new file mode 100644 index 0000000..a1359c9 --- /dev/null +++ b/nixpkgs/programs/neovim.nix @@ -0,0 +1,34 @@ +{pkgs, ...}: +{ + programs.neovim = { + enable = true; + # defaultEditor = true; + viAlias = true; + vimAlias = true; + vimdiffAlias = true; + extraConfig = '' + set clipboard+=unnamedplus + ''; + plugins = with pkgs.vimPlugins; [ + vim-commentary + vim-gitgutter + fzf-vim + vim-which-key + vim-nix + vim-surround + vim-fugitive + vim-css-color + semshi + goyo-vim + limelight-vim + vim-tmux-navigator + vim-polyglot + { + plugin = vim-monokai; + config = '' + colorscheme monokai + ''; + } + ]; + }; +} diff --git a/nixpkgs/programs/newsboat.nix b/nixpkgs/programs/newsboat.nix new file mode 100644 index 0000000..6de4f4c --- /dev/null +++ b/nixpkgs/programs/newsboat.nix @@ -0,0 +1,62 @@ +{ ... }: +let + defaultBrowser = "google-chrome-stable %u"; + videoViewer = "mpv %u"; +in { + programs.newsboat = { + enable = true; + autoReload = true; + maxItems = 50; + browser = defaultBrowser; + extraConfig = builtins.concatStringsSep "\n" [ + '' + macro m set browser "${videoViewer}"; open-in-browser ; set browser "${defaultBrowser}" + macro l set browser "${defaultBrowser}"; open-in-browser ; set browser "${defaultBrowser}" + '' + + # Unbind keys + '' + unbind-key ENTER + unbind-key j + unbind-key k + unbind-key J + unbind-key K + '' + + # Bind keys - vim style + '' + bind-key j down + bind-key k up + bind-key l open + bind-key h quit + '' + + # Theme + '' + color background default default + color listnormal default default + color listnormal_unread default default + color listfocus black cyan + color listfocus_unread black cyan + color info default black + color article default default + '' + + # Highlights + '' + highlight all "---.*---" yellow + highlight feedlist ".*(0/0))" black + highlight article "(^Feed:.*|^Title:.*|^Author:.*)" cyan default bold + highlight article "(^Link:.*|^Date:.*)" default default + highlight article "https?://[^ ]+" green default + highlight article "^(Title):.*$" blue default + highlight article "\\[[0-9][0-9]*\\]" magenta default bold + highlight article "\\[image\\ [0-9]+\\]" green default bold + highlight article "\\[embedded flash: [0-9][0-9]*\\]" green default bold + highlight article ":.*\\(link\\)$" cyan default + highlight article ":.*\\(image\\)$" blue default + highlight article ":.*\\(embedded flash\\)$" magenta default + '' + ]; + }; +} diff --git a/nixpkgs/programs/rofi.nix b/nixpkgs/programs/rofi.nix new file mode 100644 index 0000000..1331edb --- /dev/null +++ b/nixpkgs/programs/rofi.nix @@ -0,0 +1,35 @@ +{pkgs, ...}: +{ + programs.rofi = { + enable = true; + + # plugins = with pkgs; [ + # rofi-emoji + # rofi-mpd + # rofi-pass + # rofi-calc + # rofi-systemd + # rofi-power-menu + # rofi-file-browser + # ]; + + font = "Droid Sans 12"; + theme = ../../rofi/themes/blank.rasi; + + extraConfig = { + modi = "window,run,drun,ssh,windowcd,file-browser"; + show-icons = true; + drun-display-format = "{name}"; + fullscreen = false; + threads = 0; + matching = "fuzzy"; + scroll-method = 0; + disable-history = false; + window-thumbnail = true; + kb-row-up = "Up,Alt+k"; + kb-row-down = "Down,Alt+j"; + kb-row-left = "Alt+h"; + kb-row-right = "Alt+l"; + }; + }; +} diff --git a/nixpkgs/programs/tmux.nix b/nixpkgs/programs/tmux.nix new file mode 100644 index 0000000..fc6f707 --- /dev/null +++ b/nixpkgs/programs/tmux.nix @@ -0,0 +1,100 @@ +{pkgs, ...}: +{ + programs.tmux = { + enable = true; + baseIndex = 1; + clock24 = true; + escapeTime = 0; + # keyMode = "vi"; + prefix = "C-a"; + plugins = with pkgs.tmuxPlugins; [ + + ]; + extraConfig = '' + # Don't rename windows automatically after rename with ',' + set-option -g allow-rename off + + set -g mouse on + set -q -g status-utf8 on + setw -q -g utf8 on + set-option -g default-terminal screen-256color + set -g base-index 1 # windows starts at 1 + setw -g monitor-activity on + set -g visual-activity on + + # Length of tmux status line + set -g status-left-length 30 + set -g status-right-length 150 + + set -g base-index 1 + set -g pane-base-index 0 + + ###################### + ######## KEYS ######## + ###################### + + # Split panes using $P-[gh] + bind h split-window -h -c "#{pane_current_path}" + bind g split-window -v -c "#{pane_current_path}" + unbind '"' # Unbind default vertical split + unbind % # Unbind default horizontal split + + # Reload config using $P-r + unbind r + bind r \ + source-file $XDG_CONFIG_HOME/tmux/tmux.conf\;\ + display-message 'Reloaded tmux.conf' + + # Switch panes using Alt-[hjkl] + bind -n C-h select-pane -L + bind -n C-j select-pane -D + bind -n C-k select-pane -U + bind -n C-l select-pane -R + + # Resize pane using Alt-Shift-[hjkl] + bind -n M-H resize-pane -L 5 + bind -n M-J resize-pane -D 5 + bind -n M-K resize-pane -U 5 + bind -n M-L resize-pane -R 5 + + # Fullscreen current pane using $P-Alt-z + unbind z + bind M-z resize-pane -Z + + # Kill pane using $P-Backspace + unbind & + bind BSpace killp + + # Swap clock-mode and new-window + # New tab: $P-t + # Clock mode: $P-c + unbind c + unbind t + bind c clock-mode + bind t new-window + + # Setup 'y' to yank (copy) + bind-key -T copy-mode-vi 'y' send -X copy-pipe-and-cancel "pbcopy" + bind-key -T copy-mode-vi 'V' send -X select-line + bind-key -T copy-mode-vi 'r' send -X rectangle-toggle + + ###################### + ### DESIGN CHANGES ### + ###################### + + set-option -g status-left '#[bg=blue]#[fg=black,bold] ###S #[bg=default] #[fg=green]#(~/.scripts/tmux/fcitx) #[fg=red]%H:%M ' + set-option -g status-right '#[fg=red]#(~/.scripts/tmux/mpd)' + set-window-option -g window-status-current-style fg=magenta + set-option -g status-style 'bg=black fg=default' + set-option -g default-shell '${pkgs.zsh}/bin/zsh' + + set -g status-position bottom + set -g status-interval 4 + set -g status-justify centre # center align window list + + setw -g status-bg default + setw -g window-status-format '#[bg=#888888]#[fg=black,bold] #I #[bg=default] #[fg=#888888]#W ' + setw -g window-status-current-format '#[fg=black,bold]#[bg=cyan] #I #[fg=cyan]#[bg=default] #W ' + ''; + }; +} diff --git a/nixpkgs/programs/vscode-extensions/noop-syslog.c b/nixpkgs/programs/vscode-extensions/noop-syslog.c new file mode 100644 index 0000000..c76ec57 --- /dev/null +++ b/nixpkgs/programs/vscode-extensions/noop-syslog.c @@ -0,0 +1 @@ +void syslog(int priority, const char *format, ...) { } diff --git a/nixpkgs/programs/vscode-extensions/vsliveshare.nix b/nixpkgs/programs/vscode-extensions/vsliveshare.nix new file mode 100644 index 0000000..a67b003 --- /dev/null +++ b/nixpkgs/programs/vscode-extensions/vsliveshare.nix @@ -0,0 +1,124 @@ +# Based on previous attempts: +# - +# - +{ lib, gccStdenv, vscode-utils +, jq, autoPatchelfHook, bash, makeWrapper +, dotnet-sdk_3, curl, gcc, icu, libkrb5, libsecret, libunwind, libX11, lttng-ust, openssl, util-linux, zlib +, desktop-file-utils, xprop, xsel +}: + +with lib; + +let + # https://docs.microsoft.com/en-us/visualstudio/liveshare/reference/linux#install-prerequisites-manually + libs = [ + # .NET Core + openssl + libkrb5 + zlib + icu + + # Credential Storage + libsecret + + # NodeJS + libX11 + + # https://github.com/flathub/com.visualstudio.code.oss/issues/11#issuecomment-392709170 + libunwind + lttng-ust + curl + + # General + gcc.cc.lib + util-linux # libuuid + ]; + +in ((vscode-utils.override { stdenv = gccStdenv; }).buildVscodeMarketplaceExtension { + mktplcRef = { + name = "vsliveshare"; + publisher = "ms-vsliveshare"; + version = "1.0.5090"; + sha256 = "gQ4tChmGxYIt+/izw9NvLCLHD8ypNO7pcWuLw4umhF0="; + }; +}).overrideAttrs({ nativeBuildInputs ? [], buildInputs ? [], ... }: { + nativeBuildInputs = nativeBuildInputs ++ [ + bash + jq + autoPatchelfHook + makeWrapper + ]; + buildInputs = buildInputs ++ libs; + + # Using a patch file won't work, because the file changes too often, causing the patch to fail on most updates. + # Rather than patching the calls to functions, we modify the functions to return what we want, + # which is less likely to break in the future. + postPatch = '' + sed -i \ + -e 's/updateExecutablePermissionsAsync() {/& return;/' \ + -e 's/isInstallCorrupt(traceSource, manifest) {/& return false;/' \ + out/prod/extension-prod.js + declare ext_unique_id + ext_unique_id="$(basename "$out")" + # Fix extension attempting to write to 'modifiedInternalSettings.json'. + # Move this write to the tmp directory indexed by the nix store basename. + substituteInPlace out/prod/extension-prod.js \ + --replace "path.resolve(constants_1.EXTENSION_ROOT_PATH, './modifiedInternalSettings.json')" \ + "path.join(os.tmpdir(), '$ext_unique_id-modifiedInternalSettings.json')" + # Fix extension attempting to write to 'vsls-agent.lock'. + # Move this write to the tmp directory indexed by the nix store basename. + substituteInPlace out/prod/extension-prod.js \ + --replace "path + '.lock'" \ + "__webpack_require__('path').join(__webpack_require__('os').tmpdir(), '$ext_unique_id-vsls-agent.lock')" + # Hardcode executable paths + echo '#!/bin/sh' >node_modules/@vsliveshare/vscode-launcher-linux/check-reqs.sh + substituteInPlace node_modules/@vsliveshare/vscode-launcher-linux/install.sh \ + --replace desktop-file-install ${desktop-file-utils}/bin/desktop-file-install + substituteInPlace node_modules/@vsliveshare/vscode-launcher-linux/uninstall.sh \ + --replace update-desktop-database ${desktop-file-utils}/bin/update-desktop-database + substituteInPlace node_modules/@vsliveshare/vscode-launcher-linux/vsls-launcher \ + --replace /bin/bash ${bash}/bin/bash + substituteInPlace out/prod/extension-prod.js \ + --replace xprop ${xprop}/bin/xprop \ + --replace "'xsel'" "'${xsel}/bin/xsel'" + ''; + + postInstall = '' + cd $out/share/vscode/extensions/ms-vsliveshare.vsliveshare + bash -s <~!@#$%^&*|+=[]{}`?-"; + wordWrap = "off"; + # "bracketPairColorization.enabled" = true; + }; + + zen = mapPrefixToSet "zenMode" { + centerLayout = true; + hideStatusBar = false; + hideLineNumbers = false; + hideTabs = false; + }; + + vim = mapPrefixToSet "vim" { + useSystemClipboard = true; + "statusBarColorControl" = true; + "statusBarColors.insert" = "#20ff00"; + "statusBarColors.normal" = "#1D1E20"; + "statusBarColors.visual" = "#00ffff"; + "statusBarColors.replace" = "#ff002b"; + handleKeys = { + "" = true; + "" = false; + "" = false; + "" = false; + "" = false; + "" = false; + "" = true; + }; + }; + + workbench = mapPrefixToSet "workbench" { + "settings.enableNaturalLanguageSearch" = false; + enableExperiments = false; + iconTheme = "material-icon-theme"; + colorTheme = "Monokai ST3"; + colorCustomizations = { + "statusBar.background" = "#1D1E20"; + "statusBar.noFolderBackground" = "#1D1E20"; + "statusBar.debuggingBackground" = "#1D1E20"; + "[Monokai ST3]" = { + "editor.foreground" = "#ffffff"; + }; + }; + editorAssociations = { + "*.pdf" = "default"; + "*.ipynb" = "jupyter.notebook.ipynb"; + }; + }; + + python = mapPrefixToSet "python" { + "analysis.completeFunctionParens" = true; + "formatting.provider" = "yapf"; + "formatting.yapfArgs" = [ + "--style={based_on_style: pep8, indent_width: 2}" + ]; + "autoComplete.addBrackets" = true; + languageServer = "Pylance"; + }; + + java = mapPrefixToSet "java" { + "configuration.checkProjectSettingsExclusions" = false; + "test.report.showAfterExecution" = "always"; + "test.report.position" = "currentView"; + "refactor.renameFromFileExplorer" = "preview"; + }; + + sync = mapPrefixToSet "sync" { + autoUpload = true; + autoDownload = true; + quietSync = true; + gist = "86e19852a95d31a278ad1a516b40556b"; + }; + + svg = mapPrefixToSet "svgviewer" { + transparencygrid = true; + enableautopreview = true; + previewcolumn = "Beside"; + showzoominout = true; + }; + + indentRainbow = mapPrefixToSet "indentRainbow" { + errorColor = "rgb(255, 0, 0)"; + colors = [ # http://colrd.com/palette/38436/ + "rgba(26, 19, 52, 0.1)" + "rgba(1, 84, 90, 0.1)" + "rgba(3, 195, 131, 0.1)" + "rgba(251, 191, 69, 0.1)" + "rgba(237, 3, 69, 0.1)" + "rgba(113, 1, 98, 0.1)" + "rgba(2, 44, 125, 0.1)" + "rgba(38, 41, 74, 0.1)" + "rgba(1, 115, 81, 0.1)" + "rgba(170, 217, 98, 0.1)" + "rgba(239, 106, 50, 0.1)" + "rgba(161, 42, 94, 0.1)" + ]; + ignoreErrorLanguages = [ + "markdown" + "haskell" + "elm" + "fsharp" + "java" + ]; + }; + + in + editor // + indentRainbow // + java // + python // + svg // + sync // + workbench // + vim // # This needs to come after workbench because of setting ordering + zen // + { + "extensions.autoCheckUpdates" = false; + "extensions.autoUpdate" = false; + "diffEditor.ignoreTrimWhitespace" = false; + "emmet.triggerExpansionOnTab" = true; + "explorer.confirmDragAndDrop" = false; + "git.allowForcePush" = true; + "git.autofetch" = true; + "telemetry.telemetryLevel" = "off"; + "terminal.integrated.fontSize" = 14; + "vsintellicode.modify.editor.suggestSelection" = "automaticallyOverrodeDefaultValue"; + "window.zoomLevel" = 2; + + # This setting does not support language overrides + "files.exclude" = { + # Java + "**/.classpath" = true; + "**/.project" = true; + "**/.settings" = true; + "**/.factorypath" = true; + }; + + # Extensions + + "bracket-pair-colorizer-2.colorMode" = "Consecutive"; + "bracket-pair-colorizer-2.forceIterationColorCycle" = true; + "bracket-pair-colorizer-2.colors" = [ + "#fff200" + "#3d33ff" + "#ff57d5" + "#00ff11" + "#ff8400" + "#ff0030" + ]; + "docker.showStartPage" = false; + + "errorLens.errorColor" = "rgba(240,0,0,0.1)"; + "errorLens.warningColor" = "rgba(180,180,0,0.1)"; + + "jupyter.askForKernelRestart" = false; + + "keyboard-quickfix.showActionNotification" = false; + + "latex-workshop.latex.autoBuild.run" = "onFileChange"; + "latex-workshop.view.pdf.viewer" = "tab"; + + "liveshare.presence" = true; + "liveshare.showInStatusBar" = "whileCollaborating"; + + "liveServer.settings.port" = 5500; + + "material-icon-theme.folders.associations" = { + ui = "layout"; + bloc = "controller"; + }; + + "redhat.telemetry.enabled" = false; + + "sonarlint.rules" = { + "java:S3358" = { + "level" = "off"; + }; + }; + + # Language overrides + + "dart.previewFlutterUiGuides" = true; + "dart.previewFlutterUiGuidesCustomTracking" = true; + "dart.previewLsp" = true; + + "[dart]" = { + "editor.defaultFormatter" = "Dart-Code.dart-code"; + }; + + "[html]" = { + "editor.formatOnSave" = false; + "editor.defaultFormatter" = "lonefy.vscode-JS-CSS-HTML-formatter"; + }; + + "[javascript]" = { + "editor.formatOnSave" = false; + "editor.defaultFormatter" = "vscode.typescript-language-features"; + }; + + "[json]" = { + "editor.formatOnSave" = true; + }; + + "[jsonc]" = { + "editor.defaultFormatter" = "vscode.json-language-features"; + }; + }; + + keybindings = [ + { + key = "ctrl+[Period]"; + command = "keyboard-quickfix.openQuickFix"; + when = "editorHasCodeActionsProvider && editorTextFocus && !editorReadonly"; + } + + { + key = "alt+k"; + command = "selectPrevSuggestion"; + when = "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"; + } + + { + key = "alt+j"; + command = "selectNextSuggestion"; + when = "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"; + } + + { + key = "alt+k"; + command = "editor.action.moveLinesUpAction"; + when = "editorTextFocus && !editorReadonly && !suggestWidgetVisible"; + } + + { + key = "alt+j"; + command = "editor.action.moveLinesDownAction"; + when = "editorTextFocus && !editorReadonly && !suggestWidgetVisible"; + } + + { + key = "alt+j"; + command = "workbench.action.quickOpenNavigateNext"; + when = "inQuickOpen"; + } + + { + key = "alt+k"; + command = "workbench.action.quickOpenNavigatePrevious"; + when = "inQuickOpen"; + } + + { + key = "alt+f"; + command = "editor.action.formatDocument"; + when = "editorTextFocus && !editorReadonly"; + } + + { + key = "alt+o"; + command = "editor.action.insertLineAfter"; + when = "textInputFocus && !editorReadonly"; + } + + { + key = "alt+shift+o"; + command = "editor.action.insertLineBefore"; + when = "textInputFocus && !editorReadonly"; + } + ]; + + extensions = with pkgs.vscode-extensions; [ + vs-liveshare + # ms-vsliveshare.vsliveshare + redhat.java + wholroyd.jinja + bbenoist.Nix + # jock.svg + vscodevim.vim + haskell.haskell + justusadam.language-haskell + naumovs.color-highlight + # eamodio.gitlens + ms-python.python + mikestead.dotenv + redhat.vscode-yaml + # ms-toolsai.jupyter + # dotjoshjohnson.xml + usernamehw.errorlens + ibm.output-colorizer + gruntfuggly.todo-tree + mechatroner.rainbow-csv + ms-python.vscode-pylance + james-yu.latex-workshop + elmtooling.elm-ls-vscode + # WakaTime.vscode-wakatime + yzhang.markdown-all-in-one + pkief.material-icon-theme + # ms-vscode-remote.remote-ssh + # ms-azuretools.vscode-docker + justusadam.language-haskell + coenraads.bracket-pair-colorizer-2 + ] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ + { + name = "path-intellisense"; + publisher = "christian-kohler"; + version = "2.4.2"; + sha256 = "1a4d1n4jpdlx4r2majirnhnwlj34jc94wzbxdrih615176hadxvc"; + } + { + name = "xml"; + publisher = "DotJoshJohnson"; + version = "2.5.1"; + sha256 = "1v4x6yhzny1f8f4jzm4g7vqmqg5bqchyx4n25mkgvw2xp6yls037"; + } + { + name = "vscode-html-css"; + publisher = "ecmel"; + version = "1.10.2"; + sha256 = "0qzh7fwgadcahxx8hz1sbfz9lzi81iv4xiidvfm3sahyl9s6pyg1"; + } + { + name = "elm-ls-vscode"; + publisher = "elmTooling"; + version = "2.3.0"; + sha256 = "1nxl3im5aqiggjx0va64bpjrwshb6fzxan78fqzs68iwn16vsa0b"; + } + { + name = "vscode-drawio"; + publisher = "hediet"; + version = "1.6.3"; + sha256 = "0r4qrw1l8s8sfgxj4wvkzamd3yc1h1l60r3kkc1g9afkikmnbr5w"; + } + { + name = "language-x86-64-assembly"; + publisher = "13xforever"; + version = "3.0.0"; + sha256 = "0lxg58hgdl4d96yjgrcy2dbacxsc3wz4navz23xaxcx1bgl1i2y0"; + } + { + name = "monokai-st3"; + publisher = "AndreyVolosovich"; + version = "0.2.0"; + sha256 = "1rvz5hlrfshy9laybxzvrdklx328s13j0lb8ljbda9zkadi3wcad"; + } + # { + # name = "nix-env-selector"; + # publisher = "arrterian"; + # version = "1.0.7"; + # sha256 = "0mralimyzhyp4x9q98x3ck64ifbjqdp8cxcami7clvdvkmf8hxhf"; + # } + { + name = "vscode-JS-CSS-HTML-formatter"; + publisher = "lonefy"; + version = "0.2.3"; + sha256 = "06vivclp58wzmqcx6s6pl8ndqina7p995dr59aj9fk65xihkaagy"; + } + { + name = "indent-rainbow"; + publisher = "oderwat"; + version = "8.2.2"; + sha256 = "1xxljwh66f21fzmhw8icrmxxmfww1s67kf5ja65a8qb1x1rhjjgf"; + } + { + name = "vscode-css-peek"; + publisher = "pranaygp"; + version = "4.2.0"; + sha256 = "0dpkp3xs8jd826h2aa9xlfilsj4yv8q6r9cs350ljrpcyj7wrlpq"; + } + { + name = "LiveServer"; + publisher = "ritwickdey"; + version = "5.6.1"; + sha256 = "077arf3hsn1yb8xdhlrax5gf93ljww78irv4gm8ffmsqvcr1kws0"; + } + { + name = "background"; + publisher = "shalldie"; + version = "1.1.29"; + sha256 = "1x3k8pmzp186bcgga3wg6y86waxrcsi5cnwaxfmifqgn87jp2vqq"; + } + { + name = "trailing-spaces"; + publisher = "shardulm94"; + version = "0.3.1"; + sha256 = "0h30zmg5rq7cv7kjdr5yzqkkc1bs20d72yz9rjqag32gwf46s8b8"; + } + { + name = "comment-divider"; + publisher = "stackbreak"; + version = "0.4.0"; + sha256 = "1qcj2lngcv1sc7jri70ilkkrcx34wn8f4sqwk4dlgrribw6nvj1g"; + } + { + name = "lorem-ipsum"; + publisher = "Tyriar"; + version = "1.3.0"; + sha256 = "03jas413ivahfpxrlc5qif35nd67m1nmwx8p8dj1fpv04s6fdigb"; + } + { + name = "asciidoctor-vscode"; + publisher = "asciidoctor"; + version = "2.8.10"; + sha256 = "1n293nsaid9c4lsfn5ns4899yay9vckfk7ld3l2cnd29s82d316i"; + } + { + name = "vscode-svgviewer"; + publisher = "cssho"; + version = "2.0.0"; + sha256 = "06swlqiv3gc7plcbmzz795y6zwpxsdhg79k1n3jj6qngfwnv2p6z"; + } + { + name = "arm"; + publisher = "dan-c-underwood"; + version = "1.5.2"; + sha256 = "0x31wmd6m1gzm0sfi5xjsa38jr043qq9kgykw3b52hcma7ww8ky3"; + } + { + name = "dart-code"; + publisher = "Dart-Code"; + version = "3.28.0"; + sha256 = "0ppzv0cs4b559m4nvbfik2m63hs10g5idrc5j3pkgdjm14n1jiwv"; + } + { + name = "comment-anchors"; + publisher = "ExodiusStudios"; + version = "1.9.6"; + sha256 = "1zgvgf6zq1ny3v8b9jjp4j3n27qmiz45g23ljaim92g6hni38wvv"; + } + { + name = "bloc"; + publisher = "FelixAngelov"; + version = "6.2.0"; + sha256 = "0rr00pfcpjk17plzmmaqr0znj3k1qd0m2rh15c9894fifdyy69fx"; + } + { + name = "vscode-test-explorer"; + publisher = "hbenl"; + version = "2.21.1"; + sha256 = "022lnkq278ic0h9ggpqcwb3x3ivpcqjimhgirixznq0zvwyrwz3w"; + } + { + name = "haskell-linter"; + publisher = "hoovercj"; + version = "0.0.6"; + sha256 = "0fb71cbjx1pyrjhi5ak29wj23b874b5hqjbh68njs61vkr3jlf1j"; + } + { + name = "plantuml"; + publisher = "jebbs"; + version = "2.16.1"; + sha256 = "17gkrai7fdhrq0q1zip4wn7j4qx9vbbirx3n68silb34wh0dbydk"; + } + { + name = "vscode-gutter-preview"; + publisher = "kisstkondoros"; + version = "0.29.0"; + sha256 = "00vibv9xmhwaqiqzp0y2c246pqiqfjsw4bqx4vcdd67pz1wnqhg1"; + } + { + name = "vscode-JS-CSS-HTML-formatter"; + publisher = "lonefy"; + version = "0.2.3"; + sha256 = "06vivclp58wzmqcx6s6pl8ndqina7p995dr59aj9fk65xihkaagy"; + } + { + name = "git-graph"; + publisher = "mhutchie"; + version = "1.30.0"; + sha256 = "000zhgzijf3h6abhv4p3cz99ykj6489wfn81j0s691prr8q9lxxh"; + } + { + name = "test-adapter-converter"; + publisher = "ms-vscode"; + version = "0.1.4"; + sha256 = "02b04756kfk640hri1xw0p6kwjxwp8d2hpmca0iysfivfcmm1bqn"; + } + { + name = "awesome-flutter-snippets"; + publisher = "Nash"; + version = "3.0.2"; + sha256 = "009z6k719w0sypzsk53wiard3j3d8bq9b0g9s82vw3wc4jvkc3hr"; + } + { + name = "indent-rainbow"; + publisher = "oderwat"; + version = "8.2.2"; + sha256 = "1xxljwh66f21fzmhw8icrmxxmfww1s67kf5ja65a8qb1x1rhjjgf"; + } + { + name = "vscode-xml"; + publisher = "redhat"; + version = "0.18.1"; + sha256 = "006fjcr8s3rsznqgpp13cmvw8k94cfpr24r3rp019jaj5as3l1ck"; + } + { + name = "comment-divider"; + publisher = "stackbreak"; + version = "0.4.0"; + sha256 = "1qcj2lngcv1sc7jri70ilkkrcx34wn8f4sqwk4dlgrribw6nvj1g"; + } + { + name = "addDocComments"; + publisher = "stevencl"; + version = "0.0.8"; + sha256 = "08572fhn6ilfbx8zwn849ab3npyfkh9m5mk2br6sii601s9k5vrk"; + } + { + name = "vscodeintellicode"; + publisher = "VisualStudioExptTeam"; + version = "1.2.14"; + sha256 = "1j72v6grwasqk34m1jy3d6w3fgrw0dnsv7v17wca8baxrvgqsm6g"; + } + { + name = "vscode-java-debug"; + publisher = "vscjava"; + version = "0.36.0"; + sha256 = "1p9mymbf8sn39k44350zf3zwl29fhcwxfsqxr7841ch1qz88w9r8"; + } + { + name = "vscode-java-dependency"; + publisher = "vscjava"; + version = "0.18.8"; + sha256 = "1yjzgf96kqm09qlhxpa249fqb2b5wpzw9k53sgr8jx8sfx5qn95b"; + } + { + name = "vscode-java-pack"; + publisher = "vscjava"; + version = "0.18.6"; + sha256 = "095jdvvv4m8s2ymnrsq0ay7afqff5brgn6waknjfyy97qb3mzxj8"; + } + { + name = "vscode-java-test"; + publisher = "vscjava"; + version = "0.32.0"; + sha256 = "0lq6daz228ipzls88y09zbdsv9n6backs5bddpdam628rs99qvn3"; + } + { + name = "vscode-maven"; + publisher = "vscjava"; + version = "0.34.1"; + sha256 = "1mnlvnl2lg8fijxx4a6rqjix9k2j82js8kn8da7kjf4wh0ksdgvd"; + } + { + name = "markdown-all-in-one"; + publisher = "yzhang"; + version = "3.4.0"; + sha256 = "0ihfrsg2sc8d441a2lkc453zbw1jcpadmmkbkaf42x9b9cipd5qb"; + } + ]; + }; +} diff --git a/nixpkgs/programs/zathura.nix b/nixpkgs/programs/zathura.nix new file mode 100644 index 0000000..8c214a3 --- /dev/null +++ b/nixpkgs/programs/zathura.nix @@ -0,0 +1,26 @@ +{ ... }: +{ + programs.zathura = { + enable = true; + options = { + selection-clipboard = "clipboard"; + + default-bg = "#f2e3bd"; + + completion-bg = "#f2e3bd"; + completion-fg = "#5fd7a7"; + + statusbar-bg = "#f2e3bd"; + statusbar-fg = "#008ec4"; + + inputbar-bg = "#f2e3bd"; + inputbar-fg = "#c30771"; + + recolor = true; + recolor-lightcolor = "#f2e3bd"; + # recolor-darkcolor = "#000000"; + recolor-darkcolor = "#101010"; + recolor-keephue = true; + }; + }; +} diff --git a/nixpkgs/programs/zsh.nix b/nixpkgs/programs/zsh.nix new file mode 100644 index 0000000..35c348b --- /dev/null +++ b/nixpkgs/programs/zsh.nix @@ -0,0 +1,192 @@ +{ pkgs, lib, config, ... }: +{ + programs.zsh = rec { + enable = true; + dotDir = ".config/zsh"; + # enableSyntaxHighlighting = true; + defaultKeymap = "viins"; + + plugins = [ + { + name = "zsh-completions"; + src = pkgs.zsh-completions; + } + { + name = "zsh-you-should-use"; + src = pkgs.zsh-you-should-use; + } + { + name = "zsh-autosuggestions"; + src = pkgs.zsh-autosuggestions; + } + { + name = "powerlevel10k"; + src = pkgs.zsh-powerlevel10k; + file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; + } + # { + # name = "powerlevel10k-config"; + # src = lib.cleanSource ./p10k-config; + # file = "p10k.zsh"; + # } + ]; + + localVariables = { + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS = ["dir" "vcs"]; + # NIX_PATH = ''$HOME/.nix-defexpr/channels$\{NIX_PATH:+:}$NIX_PATH''; + }; + + shellAliases = with pkgs; let + + sedColor = + color: + inputPattern: + outputPattern: + "-e \"s|${inputPattern}|${outputPattern.before or ""}$(tput setaf ${toString color})${outputPattern.middle}$(tput op)${outputPattern.after or ""}|g\""; + + colorRed = sedColor 1; + + shellPipe = lib.strings.concatStringsSep " | "; + join = lib.strings.concatStringsSep " "; + + in { + + # This for some reason uses an outdated version of hm + # hs = "${pkgs.home-manager}/bin/home-manager switch"; + + hms = "home-manager switch"; + nos = "sudo ${nixos-rebuild}/bin/nixos-rebuild switch"; + ns = "nix-shell"; + + # Having 'watch' with a space after as an alias, enables it to expand other aliases + watch = "${procps}/bin/watch "; + + m = "${ncmpcpp}/bin/ncmpcpp"; + p = "${python39Packages.ipython}/bin/ipython"; + + lls = "${coreutils}/bin/ls"; + ls = "${exa}/bin/exa"; + la = "${exa}/bin/exa -lah --changed --time-style long-iso --git --group"; + lsa = "la"; + + killall = "echo \"killall is dangerous on non-gnu platforms. Using 'pkill -x'\"; pkill -x"; + + youtube-dl-list = join [ + "${youtube-dl}/bin/youtube-dl" + "-f \"bestvideo[ext=mp4]+bestaudio[e=m4a]/bestvideo+bestaudio\"" + "-o \"%(playlist_index)s-%(title)s.%(ext)s\"" + ]; + + music-dl = "${youtube-dl}/bin/youtube-dl --extract-audio -f \"bestaudio[ext=m4a]/best\""; + music-dl-list = join [ + "${youtube-dl}/bin/youtube-dl" + "--extract-audio" + "-f \"bestaudio[ext=m4a]/best\"" + "-o \"%(playlist_index)s-%(title)s.%(ext)s\"" + ]; + + skusho = "${maim}/bin/maim --hidecursor --nokeyboard $(echo $SCREENSHOT_DIR)/$(date_%s).png"; + skushoclip = shellPipe [ + "${maim}/bin/maim --hidecursor --nokeyboard --select" + "${xclip}/bin/xclip -selection clipboard -target image/png -in" + + ]; + + view-latex = "${texlive.combined.scheme-full}/bin/latexmk -pdf -pvc main.tex"; + + reload-tmux = "${tmux}/bin/tmux source $HOME/.config/tmux/tmux.conf"; + + ag="${ripgrep}/bin/rg"; + + dp = "${dropbox-cli}/bin/dropbox"; + + cd = "z"; + + ccp = "${coreutils}/bin/cp"; + cp = "${rsync}/bin/rsync --progress --human-readable"; + cpr = "${rsync}/bin/rsync --progress --human-readable --recursive"; + + ccat = "${coreutils}/bin/cat"; + cat = "${bat}/bin/bat"; + + htop = "${bottom}/bin/bottom"; + + ps = "${procs}/bin/procs"; + + fin = "${fd}/bin/fd"; + + ip = "ip -c"; + + connectedIps = shellPipe [ + "netstat -tn 2>/dev/null" + "grep :$1" + "awk '{print $5}'" + "cut -d: -f1" + "sort" + "uniq -c" + "sort -nr" + "head" + ]; + + path = let + colorSlashes = colorRed "/" {middle = "/";}; + in + "echo $PATH | sed -e 's/:/\\n/g' ${colorSlashes} | sort"; + + aliases = let + colorAliasNames = colorRed "\\(^[^=]*\\)=" {middle = "\\1"; after = "\\t";}; + + # The '[^]]' (character before /nix should not be ']') is there so that this alias' + # definition won't be removed. + removeNixLinks = "-e 's|\\([^]]\\)/nix/store/.*/bin/|\\1|'"; + in + shellPipe [ + "alias" + "sed ${colorAliasNames} ${removeNixLinks}" + "column -ts $'\\t'" + ]; + + + ports = let + colorSlashes = colorRed "/" {middle = "/";}; + colorFirstColumn = colorRed "(^[^ ]+)" {middle = "\\1";}; + in + shellPipe [ + "sudo netstat -tulpn" + "grep LISTEN" + "sed -r 's/\\s+/ /g'" + "cut -d' ' -f 4,7" + "column -t" + "sed -r ${colorFirstColumn} ${colorSlashes}" + ]; + + } + // + (let + inherit (lib.strings) concatStrings concatStringsSep; + inherit (lib.lists) range flatten; + inherit (lib.attrsets) nameValuePair; + inherit (lib.trivial) const; + + repeatItem = n: item: map (const item) (range 1 n); + repeatString = n: string: concatStrings (repeatItem n string); + + nthCds = n: [ + ("cd" + (repeatString (n + 1) ".")) + ("cd." + toString n) + (repeatString (n + 1) ".") + ("." + toString n) + (".." + toString n) + ]; + realCommand = n: "cd " + (concatStringsSep "/" (repeatItem n "..")); + + nthCdsAsNameValuePairs = n: map (cmd: nameValuePair cmd (realCommand n)) (nthCds n); + allCdNameValuePairs = (flatten (map nthCdsAsNameValuePairs (range 1 9))); + in + builtins.listToAttrs allCdNameValuePairs); + + initExtra = '' + source ${config.home.homeDirectory}/${dotDir}/p10k.zsh + ''; + }; +} diff --git a/nixpkgs/services/mpd.nix b/nixpkgs/services/mpd.nix new file mode 100644 index 0000000..1391d2e --- /dev/null +++ b/nixpkgs/services/mpd.nix @@ -0,0 +1,8 @@ +{ config, ... }: +rec { + enable = true; + musicDirectory = "${config.services.dropbox.path}/music/music"; + # musicDirectory = "${config.home.homeDirectory}/music"; + playlistDirectory = "${musicDirectory}/playlists/MPD"; +} + diff --git a/nixpkgs/services/picom.nix b/nixpkgs/services/picom.nix new file mode 100644 index 0000000..5ceb762 --- /dev/null +++ b/nixpkgs/services/picom.nix @@ -0,0 +1,34 @@ +{ + enable = true; + + blur = true; + blurExclude = [ + "class_g = 'slop'" + "class_g = 'XAVA'" + "class_g = 'lattedock'" + "class_g = 'latte-dock'" + "window_type = 'dock'" + "window_type = 'desktop'" + "_GTK_FRAME_EXTENTS@:c" + ]; + + fade = true; + fadeSteps = [ "0.1" "0.1" ]; + fadeExclude = []; + + shadow = true; + shadowOffsets = [ (-7) (-7) ]; + shadowOpacity = "0.25"; + shadowExclude = [ + "class_g = 'XAVA'" + "class_g = 'stalonetray'" + "class_g = 'lattedock'" + "class_g = 'latte-dock'" + ]; + noDockShadow = true; + noDNDShadow = true; + + vSync = true; + + extraOptions = ''''; +} diff --git a/nixpkgs/services/stalonetray.nix b/nixpkgs/services/stalonetray.nix new file mode 100644 index 0000000..a458c8d --- /dev/null +++ b/nixpkgs/services/stalonetray.nix @@ -0,0 +1,21 @@ +{ colorTheme, ... }: +{ + enable = true; + config = { + decorations = "none"; + transparent = false; + dockapp_mode = "none"; + geometry = "8x1-0+0"; + background = colorTheme.default.background; + kludges = "force_icons_size"; + grow_gravity = "NW"; + icon_gravity = "NW"; + icon_size = 30; + sticky = true; + window_type = "dock"; + window_layer = "bottom"; + no_shrink = true; + skip_taskbar = true; + slot_size = 40; + }; +} diff --git a/nixpkgs/services/sxhkd.nix b/nixpkgs/services/sxhkd.nix new file mode 100644 index 0000000..b03bcce --- /dev/null +++ b/nixpkgs/services/sxhkd.nix @@ -0,0 +1,77 @@ +{ pkgs, ... }: +{ + enable = true; + keybindings = { + + # make sxhkd reload its configuration files: + "super + Escape" = "pkill -USR1 -x sxhkd && ${pkgs.libnotify}/bin/notify-send -t 3000 \"sxhkd configuration reloaded\""; + + # Applications + "super + w" = "${pkgs.emacs}/bin/emacs"; + + "super + e" = "$FILEBROWSER"; + + "super + s" = "$BROWSER"; + + "super + r" = "${pkgs.rofi}/bin/rofi -show drun"; + + # Volume + + "super + {@F7,@F8}" = "${pkgs.alsaUtils}/bin/amixer set Master 2%{-,+}"; + + "{XF86AudioLowerVolume,XF86AudioRaiseVolume}" = "${pkgs.alsaUtils}/bin/amixer set Master 2%{-,+}"; + + "XF86AudioMute" = "${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle"; + + # Music + + "super + p" = "${pkgs.mpc_cli}/bin/mpc toggle"; + + "XF86AudioPlay" = "${pkgs.mpc_cli}/bin/mpc toggle"; + "XF86AudioPrev" = "${pkgs.mpc_cli}/bin/mpc prev"; + "XF86AudioNext" = "${pkgs.mpc_cli}/bin/mpc next"; + + # Monitor + + "XF86MonBrightnessUp" = "${pkgs.light}/bin/light -A 5"; + "XF86MonBrightnessDown" = "${pkgs.light}/bin/light -U 5"; + + "@Print" = "${pkgs.maim}/bin/maim --hidecursor --nokeyboard --select | ${pkgs.xclip}/bin/xclip -selection clipboard -target image/png -in"; + + "shift + @Print" = "${pkgs.maim}/bin/maim --hidecursor --nokeyboard $SCREENSHOT_DIR/$(date +%s).png"; + + # TODO: Add boomer as package + # "super + @Print" = "boomer"; + + # Misc + + "super + a" = "${pkgs.copyq}/bin/copyq toggle"; + + # fcitx + "super + {b,n,m}" = "${pkgs.fcitx}/bin/fcitx-remote -s {mozc,fcitx-keyboard-no,fcitx-keyboard-us}"; + + # fcitx5 + # "super + {b,n,m}" = "${pkgs.fcitx5}/bin/fcitx5-remote -s {mozc,keyboard-no,keyboard-us}"; + + # TODO: fix + # "super + v" = "${pkgs.rofi}/bin/rofi -modi lpass:$HOME/.scripts/rofi/lpass/rofi-lpass -show lpass"; + + "super + minus" = "${pkgs.xcalib}/bin/xcalib -invert -alter"; + + # ¯\_(ツ)_/¯ + # "super + shift + s" + # sleep 0.3; \ + # ${pkgs.xdotool}/bin/xdotool key U00AF; \ + # ${pkgs.xdotool}/bin/xdotool key U005C; \ + # ${pkgs.xdotool}/bin/xdotool key U005F; \ + # ${pkgs.xdotool}/bin/xdotool key U0028; \ + # ${pkgs.xdotool}/bin/xdotool key U30C4; \ + # ${pkgs.xdotool}/bin/xdotool key U0029; \ + # ${pkgs.xdotool}/bin/xdotool key U005F; \ + # ${pkgs.xdotool}/bin/xdotool key U002F; \ + # ${pkgs.xdotool}/bin/xdotool key U00AF + + # é + "super + shift + e" = "sleep 0.3; ${pkgs.xdotool}/bin/xdotool key U00E9"; + }; +}