mirror of
https://codeberg.org/ProgramSnail/config.git
synced 2026-03-11 20:47:07 +00:00
Compare commits
10 commits
c2a86623a7
...
86f72b810e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
86f72b810e | ||
|
|
6a5cb60746 | ||
|
|
78454e2000 | ||
|
|
6c46903e4a | ||
|
|
cf5e20d4e7 | ||
|
|
d89d235b35 | ||
|
|
9ac04573a4 | ||
|
|
f0756b2a9a | ||
|
|
262c37e98f | ||
|
|
9e97c4c76d |
31 changed files with 285 additions and 135 deletions
|
|
@ -9,19 +9,20 @@
|
||||||
- ssh
|
- ssh
|
||||||
- scripts
|
- scripts
|
||||||
apps:
|
apps:
|
||||||
|
- ansible
|
||||||
- cli
|
- cli
|
||||||
vars_prompt:
|
vars_prompt:
|
||||||
- name: tools_in
|
- name: tools_in
|
||||||
prompt: "Specify comma separated list of required tool packages (cpp, js, haskell, ocaml, coq, txt, lang, truffle)"
|
prompt: "Specify comma separated list of required tool packages (cpp, js, haskell, ocaml, coq, txt, lang, truffle, gamedev)"
|
||||||
private: false
|
private: false
|
||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Get tools list
|
- name: Get tools list
|
||||||
ansible.builtin.set_fact:
|
ansible.builtin.set_fact:
|
||||||
tools: "{{ tools_in.split(',') }}"
|
tools: "{{ tools_in.split(',') }}"
|
||||||
roles:
|
roles:
|
||||||
# link and copy dotfiles
|
|
||||||
- role: dotfiles
|
|
||||||
# install apps
|
# install apps
|
||||||
- role: installs
|
- role: installs
|
||||||
|
# link and copy dotfiles
|
||||||
|
- role: dotfiles
|
||||||
# install and setup dev tools
|
# install and setup dev tools
|
||||||
- role: dev
|
- role: dev
|
||||||
|
|
|
||||||
|
|
@ -18,15 +18,16 @@
|
||||||
- ssh
|
- ssh
|
||||||
- scripts
|
- scripts
|
||||||
apps:
|
apps:
|
||||||
|
- ansible
|
||||||
- cli
|
- cli
|
||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Get tools list
|
- name: Get tools list
|
||||||
ansible.builtin.set_fact:
|
ansible.builtin.set_fact:
|
||||||
tools: "{{ tools_in.split(',') }}"
|
tools: "{{ tools_in.split(',') }}"
|
||||||
roles:
|
roles:
|
||||||
# link and copy dotfiles
|
|
||||||
- role: dotfiles
|
|
||||||
# install apps
|
# install apps
|
||||||
- role: installs
|
- role: installs
|
||||||
|
# link and copy dotfiles
|
||||||
|
- role: dotfiles
|
||||||
# install and setup dev tools
|
# install and setup dev tools
|
||||||
- role: dev
|
- role: dev
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
- name: Install common packages
|
- name: Installing common dependencies packages
|
||||||
|
become: true
|
||||||
ansible.builtin.dnf5:
|
ansible.builtin.dnf5:
|
||||||
name:
|
name:
|
||||||
- openssl
|
- openssl
|
||||||
- perl
|
# - perl # NOTE: install does not work (?)
|
||||||
- ninja-build
|
- ninja-build
|
||||||
- git
|
- git
|
||||||
- make
|
- make
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
- name: Install vscode (uncoded)
|
- name: Installing vscode (uncoded)
|
||||||
ansible.builtin.import_tasks: vscode.yml
|
ansible.builtin.import_tasks: vscode.yml
|
||||||
|
|
||||||
- name: Install ocaml (required for lsp)
|
- name: Installing ocaml (required for lsp)
|
||||||
ansible.builtin.import_tasks: ocaml.yml
|
ansible.builtin.import_tasks: ocaml.yml
|
||||||
|
|
||||||
# TODO: add otion to choose ocaml switch
|
# TODO: add otion to choose ocaml switch
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,8 @@
|
||||||
# - name: Install build comon deps
|
# - name: Install build comon deps
|
||||||
# ansible.builtin.import_tasks: build.yml
|
# ansible.builtin.import_tasks: build.yml
|
||||||
|
|
||||||
- name: Install tools for cpp dev
|
- name: Installing tools for cpp dev
|
||||||
|
become: true
|
||||||
ansible.builtin.dnf5:
|
ansible.builtin.dnf5:
|
||||||
name:
|
name:
|
||||||
- make
|
- make
|
||||||
|
|
@ -10,10 +11,8 @@
|
||||||
- xmake
|
- xmake
|
||||||
|
|
||||||
- clang
|
- clang
|
||||||
- clang-tools
|
|
||||||
- clang-tools-extra
|
|
||||||
- clang-devel
|
- clang-devel
|
||||||
- clang-tools-devel
|
- clang-tools-extra
|
||||||
- clang-tools-extra-devel
|
- clang-tools-extra-devel
|
||||||
- clang-libs
|
- clang-libs
|
||||||
|
|
||||||
|
|
|
||||||
64
roles/dev/tasks/gamedev.yml
Normal file
64
roles/dev/tasks/gamedev.yml
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
- name: Getting programs list to check fish presence
|
||||||
|
ansible.builtin.package_facts:
|
||||||
|
manager: auto
|
||||||
|
|
||||||
|
# defold
|
||||||
|
- name: Creating defold game engine dir
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ ansible_env.HOME }}/defold"
|
||||||
|
state: directory
|
||||||
|
mode: a
|
||||||
|
- name: Installing defold game engine
|
||||||
|
ansible.builtin.unarchive:
|
||||||
|
remote_src: true
|
||||||
|
src: "https://github.com/defold/defold/releases/latest/download/Defold-x86_64-linux.zip"
|
||||||
|
dest: "{{ ansible_env.HOME }}/defold"
|
||||||
|
mode: a
|
||||||
|
keep_newer: true
|
||||||
|
extra_opts: [--strip-components=1]
|
||||||
|
- name: Updating fish path for defold
|
||||||
|
ansible.builtin.shell: fish_add_path -m {{ ansible_env.HOME }}/defold
|
||||||
|
args:
|
||||||
|
executable: /usr/bin/fish
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
# lua lsp
|
||||||
|
- name: Get latest typst version
|
||||||
|
community.general.github_release:
|
||||||
|
user: typst
|
||||||
|
repo: typst
|
||||||
|
action: latest_release
|
||||||
|
register: lua_lsp_version
|
||||||
|
|
||||||
|
- name: Installing lua lsp {{ lua_lsp_version.tag }}
|
||||||
|
become: true
|
||||||
|
ansible.builtin.unarchive:
|
||||||
|
remote_src: true
|
||||||
|
# TODO: remove v before version ??
|
||||||
|
src: "https://github.com/LuaLS/lua-language-server/releases/download/{{ lua_lsp_version.tag }}/lua-language-server-{{ lua_lsp_version.tag }}-linux-x64.tar.gz"
|
||||||
|
dest: "{{ ansible_env.HOME }}/.lua_lsp"
|
||||||
|
keep_newer: true
|
||||||
|
mode: a
|
||||||
|
extra_opts: [--strip-components=1]
|
||||||
|
- name: Updating fish path for lua lsp
|
||||||
|
ansible.builtin.shell: fish_add_path -m {{ ansible_env.HOME }}/.lua_lsp/bin
|
||||||
|
args:
|
||||||
|
executable: /usr/bin/fish
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
# TODO: download directly, add godot c# (?)
|
||||||
|
# godot
|
||||||
|
- name: Installing godot game engine
|
||||||
|
become: true
|
||||||
|
ansible.builtin.dnf5:
|
||||||
|
name:
|
||||||
|
- godot
|
||||||
|
state: latest
|
||||||
|
|
||||||
|
# raylib
|
||||||
|
- name: Installing raylib
|
||||||
|
become: true
|
||||||
|
ansible.builtin.dnf5:
|
||||||
|
name:
|
||||||
|
- raylib-devel
|
||||||
|
state: latest
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
- name: Download ghcup bootstrap script
|
- name: Downloading ghcup bootstrap script
|
||||||
ansible.builtin.uri:
|
ansible.builtin.uri:
|
||||||
url: https://get-ghcup.haskell.org
|
url: https://get-ghcup.haskell.org
|
||||||
return_content: true
|
return_content: true
|
||||||
register: ghcup_bootstrap
|
register: ghcup_bootstrap
|
||||||
|
|
||||||
- name: Check if .ghcup present
|
- name: Checking if .ghcup present
|
||||||
ansible.builtin.stat:
|
ansible.builtin.stat:
|
||||||
path: '{{ ansible_env.HOME }}/.ghcup'
|
path: '{{ ansible_env.HOME }}/.ghcup'
|
||||||
register: ghcup_dir
|
register: ghcup_dir
|
||||||
|
|
||||||
# TODO: detect fish install ??
|
# TODO: detect fish install ??
|
||||||
- name: Install ghcup, stack, lsp server
|
- name: Installing ghcup, stack, lsp server
|
||||||
ansible.builtin.shell: |
|
ansible.builtin.shell: |
|
||||||
SHELL='/usr/bin/fish'
|
SHELL='/usr/bin/fish'
|
||||||
BOOTSTRAP_HASKELL_NONINTERACTIVE=1
|
BOOTSTRAP_HASKELL_NONINTERACTIVE=1
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,37 @@
|
||||||
- name: Install nodejs
|
- name: Installing nodejs & curl (for bun)
|
||||||
|
become: true
|
||||||
ansible.builtin.dnf5:
|
ansible.builtin.dnf5:
|
||||||
name:
|
name:
|
||||||
- nodejs
|
- nodejs
|
||||||
- curl
|
- curl
|
||||||
state: latest
|
state: latest
|
||||||
|
|
||||||
- name: Curl is required for bun
|
- name: Downloading bun install script
|
||||||
ansible.builtin.dnf5:
|
ansible.builtin.uri:
|
||||||
name:
|
url: https://bun.sh/install
|
||||||
- curl
|
return_content: true
|
||||||
state: latest
|
register: bun_bootstrap
|
||||||
|
|
||||||
# TODO: use curl script ??
|
- name: Checking if .bun present
|
||||||
- name: Install bun
|
ansible.builtin.stat:
|
||||||
ansible.builtin.command:
|
path: '{{ ansible_env.HOME }}/.bun'
|
||||||
cmd: npm install -g bun
|
register: bun_dir
|
||||||
changed_when: true # change is checked inside npm
|
|
||||||
|
|
||||||
- name: Get programs list to check fish presence
|
# TODO: detect fish install ??
|
||||||
|
- name: Installing bun
|
||||||
|
ansible.builtin.shell: |
|
||||||
|
{{ bun_bootstrap.content }}
|
||||||
|
args:
|
||||||
|
executable: /bin/bash
|
||||||
|
changed_when: not bun_dir.stat.exists
|
||||||
|
|
||||||
|
# update path
|
||||||
|
- name: Getting programs list to check fish presence
|
||||||
ansible.builtin.package_facts:
|
ansible.builtin.package_facts:
|
||||||
manager: auto
|
manager: auto
|
||||||
|
|
||||||
- name: Update fish path for bun
|
- name: Updating fish path for bun
|
||||||
ansible.builtin.shell: fish_add_path {{ ansible_env.HOME }}/.bun/bin
|
ansible.builtin.shell: fish_add_path -m {{ ansible_env.HOME }}/.bun/bin
|
||||||
args:
|
args:
|
||||||
executable: /usr/bin/fish
|
executable: /usr/bin/fish
|
||||||
changed_when: true # change is checked inside fish_add_path
|
changed_when: false
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
- name: Install c++ build tools
|
- name: Installing c++ build tools
|
||||||
ansible.builtin.import_tasks: cpp.yml
|
ansible.builtin.import_tasks: cpp.yml
|
||||||
|
|
||||||
- name: Install tools for lang dev
|
- name: Installing tools for lang dev
|
||||||
|
become: true
|
||||||
ansible.builtin.dnf5:
|
ansible.builtin.dnf5:
|
||||||
name:
|
name:
|
||||||
- tree-sitter-cli
|
- tree-sitter-cli
|
||||||
|
|
|
||||||
|
|
@ -32,3 +32,7 @@
|
||||||
- name: Truffle development environment
|
- name: Truffle development environment
|
||||||
ansible.builtin.import_tasks: truffle.yml
|
ansible.builtin.import_tasks: truffle.yml
|
||||||
when: "'truffle' in tools"
|
when: "'truffle' in tools"
|
||||||
|
|
||||||
|
- name: Truffle development environment
|
||||||
|
ansible.builtin.import_tasks: gamedev.yml
|
||||||
|
when: "'gamedev' in tools"
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
# TODO: use ansible ocaml package for install ??
|
# TODO: use ansible ocaml package for install ??
|
||||||
- name: Install opam
|
- name: Installing opam
|
||||||
|
become: true
|
||||||
ansible.builtin.dnf5:
|
ansible.builtin.dnf5:
|
||||||
name:
|
name:
|
||||||
- opam
|
- opam
|
||||||
|
|
@ -17,7 +18,7 @@
|
||||||
manager: auto
|
manager: auto
|
||||||
|
|
||||||
- name: Update fish path for bun
|
- name: Update fish path for bun
|
||||||
ansible.builtin.shell: fish_add_path {{ ansible_env.HOME }}/.opam/default/bin
|
ansible.builtin.shell: fish_add_path -m {{ ansible_env.HOME }}/.opam/default/bin
|
||||||
args:
|
args:
|
||||||
executable: /usr/bin/fish
|
executable: /usr/bin/fish
|
||||||
changed_when: true # change is checked inside fish_add_path
|
changed_when: false
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
- name: Getting programs list to check fish presence
|
||||||
|
ansible.builtin.package_facts:
|
||||||
|
manager: auto
|
||||||
|
|
||||||
- name: Creating truffle dir
|
- name: Creating truffle dir
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ ansible_env.HOME }}/truffle"
|
path: "{{ ansible_env.HOME }}/truffle"
|
||||||
|
|
@ -5,27 +9,58 @@
|
||||||
mode: a
|
mode: a
|
||||||
|
|
||||||
# install tools
|
# install tools
|
||||||
- name: Install openjdk
|
- name: Installing openjdk
|
||||||
|
become: true
|
||||||
ansible.builtin.dnf5:
|
ansible.builtin.dnf5:
|
||||||
name:
|
name:
|
||||||
- java-latest-openjdk
|
- java-latest-openjdk
|
||||||
- maven
|
- maven
|
||||||
state: latest
|
state: latest
|
||||||
- name: "Installing graalvm 23"
|
- name: Creating graalvm dir
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ ansible_env.HOME }}/truffle/graalvm-23"
|
||||||
|
state: directory
|
||||||
|
mode: a
|
||||||
|
- name: Installing graalvm 23
|
||||||
ansible.builtin.unarchive:
|
ansible.builtin.unarchive:
|
||||||
remote_src: true
|
remote_src: true
|
||||||
src: "https://download.oracle.com/graalvm/23/latest/graalvm-jdk-23_linux-x64_bin.tar.gz"
|
src: "https://download.oracle.com/graalvm/23/latest/graalvm-jdk-23_linux-x64_bin.tar.gz"
|
||||||
dest: "{{ ansible_env.HOME }}/truffle/graalvm"
|
dest: "{{ ansible_env.HOME }}/truffle/graalvm-23"
|
||||||
mode: a
|
mode: a
|
||||||
keep_newer: true
|
keep_newer: true
|
||||||
|
extra_opts: [--strip-components=1]
|
||||||
- name: Select graalvm as java
|
- name: Select graalvm as java
|
||||||
|
become: true
|
||||||
community.general.alternatives:
|
community.general.alternatives:
|
||||||
name: java
|
name: java
|
||||||
path: "{{ ansible_env.HOME }}/truffle/graalvm-jdk-23.0.2+7.1/jre/bin/java"
|
link: /usr/bin/java
|
||||||
|
path: "{{ ansible_env.HOME }}/truffle/graalvm-23/bin/java"
|
||||||
|
|
||||||
- name: Install Intellij IDEA
|
# NOTE: does not work properly (?)
|
||||||
ansible.builtin.include_role:
|
# - name: Installing Intellij IDEA
|
||||||
name: gantsign.intellij
|
# ansible.builtin.include_role:
|
||||||
|
# name: gantsign.intellij
|
||||||
|
|
||||||
|
# intellij idea
|
||||||
|
- name: Creating intellij idea dir
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ ansible_env.HOME }}/idea"
|
||||||
|
state: directory
|
||||||
|
- name: Installing intellij idea
|
||||||
|
ansible.builtin.unarchive:
|
||||||
|
remote_src: true
|
||||||
|
src: "https://github.com/JetBrains/intellij-community/releases/download/idea%2F2025.2/ideaIC-252.23892.409.tar.gz"
|
||||||
|
dest: "{{ ansible_env.HOME }}/idea"
|
||||||
|
extra_opts: [--strip-components=1]
|
||||||
|
- name: Updating fish path for intellil idea
|
||||||
|
ansible.builtin.shell: fish_add_path -m {{ ansible_env.HOME }}/idea/bin
|
||||||
|
args:
|
||||||
|
executable: /usr/bin/fish
|
||||||
|
changed_when: false
|
||||||
|
# - name: Running idea for the first time
|
||||||
|
# ansible.builtin.command:
|
||||||
|
# cmd: "{{ ansible_env.HOME }}/idea/bin/idea.sh"
|
||||||
|
# changed_when: false
|
||||||
|
|
||||||
# examples
|
# examples
|
||||||
- name: Clone simple language example
|
- name: Clone simple language example
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
action: latest_release
|
action: latest_release
|
||||||
register: typst_version
|
register: typst_version
|
||||||
|
|
||||||
- name: "Installing typst {{ typst_version.tag }}"
|
- name: Installing typst {{ typst_version.tag }}
|
||||||
become: true
|
become: true
|
||||||
ansible.builtin.unarchive:
|
ansible.builtin.unarchive:
|
||||||
remote_src: true
|
remote_src: true
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
action: latest_release
|
action: latest_release
|
||||||
register: tinymist_version
|
register: tinymist_version
|
||||||
|
|
||||||
- name: "Installing tinymist (typst lsp) {{ tinymist_version.tag }}"
|
- name: Installing tinymist (typst lsp) {{ tinymist_version.tag }}
|
||||||
become: true
|
become: true
|
||||||
ansible.builtin.unarchive:
|
ansible.builtin.unarchive:
|
||||||
remote_src: true
|
remote_src: true
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
- name: Installing vscode deps
|
- name: Installing vscode deps
|
||||||
|
become: true
|
||||||
ansible.builtin.dnf5:
|
ansible.builtin.dnf5:
|
||||||
name:
|
name:
|
||||||
- fuse
|
- fuse
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,3 @@
|
||||||
if status is-interactive
|
if status is-interactive
|
||||||
# Commands to run in interactive sessions can go here
|
# Commands to run in interactive sessions can go here
|
||||||
end
|
end
|
||||||
|
|
||||||
# opam configuration
|
|
||||||
source /home/dragon/Containers/Dev/.opam/opam-init/init.fish > /dev/null 2> /dev/null; or true
|
|
||||||
|
|
|
||||||
|
|
@ -1,44 +1,32 @@
|
||||||
# This file contains fish universal variable definitions.
|
# This file contains fish universal variable definitions.
|
||||||
# VERSION: 3.0
|
# VERSION: 3.0
|
||||||
SETUVAR __fish_initialized:3400
|
SETUVAR __fish_initialized:3800
|
||||||
SETUVAR fish_color_autosuggestion:4D5566
|
SETUVAR fish_color_autosuggestion:brblack
|
||||||
SETUVAR fish_color_cancel:\x2dr
|
SETUVAR fish_color_cancel:\x2dr
|
||||||
SETUVAR fish_color_command:39BAE6
|
SETUVAR fish_color_command:normal
|
||||||
SETUVAR fish_color_comment:626A73
|
SETUVAR fish_color_comment:red
|
||||||
SETUVAR fish_color_cwd:59C2FF
|
SETUVAR fish_color_cwd:green
|
||||||
SETUVAR fish_color_cwd_root:red
|
SETUVAR fish_color_cwd_root:red
|
||||||
SETUVAR fish_color_end:F29668
|
SETUVAR fish_color_end:green
|
||||||
SETUVAR fish_color_error:FF3333
|
SETUVAR fish_color_error:brred
|
||||||
SETUVAR fish_color_escape:95E6CB
|
SETUVAR fish_color_escape:brcyan
|
||||||
SETUVAR fish_color_history_current:\x2d\x2dbold
|
SETUVAR fish_color_history_current:\x2d\x2dbold
|
||||||
SETUVAR fish_color_host:normal
|
SETUVAR fish_color_host:normal
|
||||||
SETUVAR fish_color_host_remote:yellow
|
SETUVAR fish_color_host_remote:yellow
|
||||||
SETUVAR fish_color_keyword:39BAE6
|
SETUVAR fish_color_normal:normal
|
||||||
SETUVAR fish_color_match:F07178
|
SETUVAR fish_color_operator:brcyan
|
||||||
SETUVAR fish_color_normal:B3B1AD
|
SETUVAR fish_color_param:cyan
|
||||||
SETUVAR fish_color_operator:E6B450
|
SETUVAR fish_color_quote:yellow
|
||||||
SETUVAR fish_color_option:B3B1AD
|
SETUVAR fish_color_redirection:cyan\x1e\x2d\x2dbold
|
||||||
SETUVAR fish_color_param:B3B1AD
|
SETUVAR fish_color_search_match:white\x1e\x2d\x2dbackground\x3dbrblack
|
||||||
SETUVAR fish_color_quote:C2D94C
|
SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack
|
||||||
SETUVAR fish_color_redirection:FFEE99
|
|
||||||
SETUVAR fish_color_search_match:\x2d\x2dbackground\x3dE6B450
|
|
||||||
SETUVAR fish_color_selection:\x2d\x2dbackground\x3dE6B450
|
|
||||||
SETUVAR fish_color_status:red
|
SETUVAR fish_color_status:red
|
||||||
SETUVAR fish_color_user:brgreen
|
SETUVAR fish_color_user:brgreen
|
||||||
SETUVAR fish_color_valid_path:\x2d\x2dunderline
|
SETUVAR fish_color_valid_path:\x2d\x2dunderline
|
||||||
SETUVAR fish_greeting:\x1d
|
|
||||||
SETUVAR fish_key_bindings:fish_default_key_bindings
|
SETUVAR fish_key_bindings:fish_default_key_bindings
|
||||||
SETUVAR fish_pager_color_background:\x1d
|
|
||||||
SETUVAR fish_pager_color_completion:normal
|
SETUVAR fish_pager_color_completion:normal
|
||||||
SETUVAR fish_pager_color_description:B3A06D\x1eyellow
|
SETUVAR fish_pager_color_description:yellow\x1e\x2di
|
||||||
SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
|
SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
|
||||||
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
|
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
|
||||||
SETUVAR fish_pager_color_secondary_background:\x1d
|
SETUVAR fish_pager_color_selected_background:\x2dr
|
||||||
SETUVAR fish_pager_color_secondary_completion:\x1d
|
SETUVAR fish_user_paths:/home/dragon/Containers/DevHomebrew/idea/bin\x1e/home/dragon/Containers/DevHomebrew/\x2ebin
|
||||||
SETUVAR fish_pager_color_secondary_description:\x1d
|
|
||||||
SETUVAR fish_pager_color_secondary_prefix:\x1d
|
|
||||||
SETUVAR fish_pager_color_selected_background:\x2d\x2dbackground\x3dE6B450
|
|
||||||
SETUVAR fish_pager_color_selected_completion:\x1d
|
|
||||||
SETUVAR fish_pager_color_selected_description:\x1d
|
|
||||||
SETUVAR fish_pager_color_selected_prefix:\x1d
|
|
||||||
SETUVAR fish_user_paths:/home/dragon/\x2elocal/bin
|
|
||||||
|
|
|
||||||
0
roles/dotfiles/files/.profile
Normal file
0
roles/dotfiles/files/.profile
Normal file
|
|
@ -1,25 +1,25 @@
|
||||||
- name: Link bashrc
|
- name: Linking bashrc
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.bashrc'
|
src: '{{ role_path }}/files/.bashrc'
|
||||||
dest: '{{ ansible_env.HOME }}/.bashrc'
|
dest: '{{ ansible_env.HOME }}/.bashrc'
|
||||||
state: link
|
state: link
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- name: Link inputrc
|
- name: Linking inputrc
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.inputrc'
|
src: '{{ role_path }}/files/.inputrc'
|
||||||
dest: '{{ ansible_env.HOME }}/.inputrc'
|
dest: '{{ ansible_env.HOME }}/.inputrc'
|
||||||
state: link
|
state: link
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- name: Link profile
|
- name: Linking profile
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.profile'
|
src: '{{ role_path }}/files/.profile'
|
||||||
dest: '{{ ansible_env.HOME }}/.profile'
|
dest: '{{ ansible_env.HOME }}/.profile'
|
||||||
state: link
|
state: link
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- name: Link bash profile
|
- name: Linking bash profile
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.bash_profile'
|
src: '{{ role_path }}/files/.bash_profile'
|
||||||
dest: '{{ ansible_env.HOME }}/.bash_profile'
|
dest: '{{ ansible_env.HOME }}/.bash_profile'
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,49 @@
|
||||||
# shell
|
# shell
|
||||||
- name: Import bash config
|
- name: Importing bash config
|
||||||
ansible.builtin.import_tasks: bash.yml
|
ansible.builtin.import_tasks: bash.yml
|
||||||
|
|
||||||
# copy to modify during install ??
|
- name: Creating fish configuration directory
|
||||||
- name: Link fish configuration directory
|
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.config/fish'
|
|
||||||
dest: '{{ ansible_env.HOME }}/.config/fish'
|
dest: '{{ ansible_env.HOME }}/.config/fish'
|
||||||
|
state: directory
|
||||||
|
mode: a
|
||||||
|
|
||||||
|
- name: Linking fish configuration (config)
|
||||||
|
ansible.builtin.file:
|
||||||
|
src: '{{ role_path }}/files/.config/fish/config.fish'
|
||||||
|
dest: '{{ ansible_env.HOME }}/.config/fish/config.fish'
|
||||||
state: link
|
state: link
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
|
- name: Linking fish configuration (functions)
|
||||||
|
ansible.builtin.file:
|
||||||
|
src: '{{ role_path }}/files/.config/fish/functions'
|
||||||
|
dest: '{{ ansible_env.HOME }}/.config/fish/functions'
|
||||||
|
state: link
|
||||||
|
force: true
|
||||||
|
|
||||||
|
- name: Linking fish configuration (completions)
|
||||||
|
ansible.builtin.file:
|
||||||
|
src: '{{ role_path }}/files/.config/fish/completions'
|
||||||
|
dest: '{{ ansible_env.HOME }}/.config/fish/completions'
|
||||||
|
state: link
|
||||||
|
force: true
|
||||||
|
|
||||||
|
- name: Linking fish configuration (conf.d)
|
||||||
|
ansible.builtin.file:
|
||||||
|
src: '{{ role_path }}/files/.config/fish/conf.d'
|
||||||
|
dest: '{{ ansible_env.HOME }}/.config/fish/conf.d'
|
||||||
|
state: link
|
||||||
|
force: true
|
||||||
|
|
||||||
|
- name: Copying fish configuration (variables)
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: '{{ role_path }}/files/.config/fish/fish_variables'
|
||||||
|
dest: '{{ ansible_env.HOME }}/.config/fish/fish_variables'
|
||||||
|
force: false
|
||||||
|
|
||||||
# apps
|
# apps
|
||||||
- name: Link tmux configuration
|
- name: Linking tmux configuration
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.tmux.conf'
|
src: '{{ role_path }}/files/.tmux.conf'
|
||||||
dest: '{{ ansible_env.HOME }}/.tmux.conf'
|
dest: '{{ ansible_env.HOME }}/.tmux.conf'
|
||||||
|
|
@ -19,27 +51,16 @@
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
# TODO: set server keys in some way
|
# TODO: set server keys in some way
|
||||||
- name: Link tmate configuration
|
- name: Linking tmate configuration
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.tmate.conf'
|
src: '{{ role_path }}/files/.tmate.conf'
|
||||||
dest: '{{ ansible_env.HOME }}/.tmate.conf'
|
dest: '{{ ansible_env.HOME }}/.tmate.conf'
|
||||||
state: link
|
state: link
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- name: Link helix configuration
|
- name: Linking helix configuration
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.config/helix'
|
src: '{{ role_path }}/files/.config/helix'
|
||||||
dest: '{{ ansible_env.HOME }}/.config/helix'
|
dest: '{{ ansible_env.HOME }}/.config/helix'
|
||||||
state: link
|
state: link
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
# path update
|
|
||||||
- name: Get programs list to check fish presence
|
|
||||||
ansible.builtin.package_facts:
|
|
||||||
manager: auto
|
|
||||||
|
|
||||||
- name: Update fish path to include scripts folder
|
|
||||||
ansible.builtin.shell: fish_add_path {{ ansible_env.HOME }}/.bin
|
|
||||||
args:
|
|
||||||
executable: /usr/bin/fish
|
|
||||||
changed_when: true # change is checked inside fish_add_path
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
- name: Link gitconfig
|
- name: Linking gitconfig
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.gitconfig'
|
src: '{{ role_path }}/files/.gitconfig'
|
||||||
dest: '{{ ansible_env.HOME }}/.gitconfig'
|
dest: '{{ ansible_env.HOME }}/.gitconfig'
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
- name: Link kitty configuration directory
|
- name: Linking kitty configuration directory
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.config/kitty'
|
src: '{{ role_path }}/files/.config/kitty'
|
||||||
dest: '{{ ansible_env.HOME }}/.config/kitty'
|
dest: '{{ ansible_env.HOME }}/.config/kitty'
|
||||||
state: link
|
state: link
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- name: Link alacritty configuration file
|
- name: Linking alacritty configuration file
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.alacritty.toml'
|
src: '{{ role_path }}/files/.alacritty.toml'
|
||||||
dest: '{{ ansible_env.HOME }}/.alacritty.toml'
|
dest: '{{ ansible_env.HOME }}/.alacritty.toml'
|
||||||
state: link
|
state: link
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- name: Link alacritty configuration directory
|
- name: Linking alacritty configuration directory
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.config/alacritty'
|
src: '{{ role_path }}/files/.config/alacritty'
|
||||||
dest: '{{ ansible_env.HOME }}/.config/alacritty'
|
dest: '{{ ansible_env.HOME }}/.config/alacritty'
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,10 @@
|
||||||
ansible.builtin.import_tasks: bash.yml
|
ansible.builtin.import_tasks: bash.yml
|
||||||
when: "'bash' in configure"
|
when: "'bash' in configure"
|
||||||
|
|
||||||
|
- name: Script dirs config
|
||||||
|
ansible.builtin.import_tasks: scripts.yml
|
||||||
|
when: "'scripts' in configure"
|
||||||
|
|
||||||
- name: Common cli tools config
|
- name: Common cli tools config
|
||||||
ansible.builtin.import_tasks: cli.yml
|
ansible.builtin.import_tasks: cli.yml
|
||||||
when: "'cli' in configure"
|
when: "'cli' in configure"
|
||||||
|
|
@ -24,10 +28,6 @@
|
||||||
ansible.builtin.import_tasks: gui.yml
|
ansible.builtin.import_tasks: gui.yml
|
||||||
when: "'gui' in configure"
|
when: "'gui' in configure"
|
||||||
|
|
||||||
- name: Script dirs config
|
|
||||||
ansible.builtin.import_tasks: scripts.yml
|
|
||||||
when: "'scripts' in configure"
|
|
||||||
|
|
||||||
- name: Desctop envionment config
|
- name: Desctop envionment config
|
||||||
ansible.builtin.import_tasks: de.yml
|
ansible.builtin.import_tasks: de.yml
|
||||||
when: "'de' in configure"
|
when: "'de' in configure"
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,24 @@
|
||||||
- name: Link scripts
|
- name: Linking scripts
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.bin'
|
src: '{{ role_path }}/files/.bin'
|
||||||
dest: '{{ ansible_env.HOME }}/.bin'
|
dest: '{{ ansible_env.HOME }}/.bin'
|
||||||
state: link
|
state: link
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- name: Link templates
|
- name: Linking templates
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.templates'
|
src: '{{ role_path }}/files/.templates'
|
||||||
dest: '{{ ansible_env.HOME }}/.templates'
|
dest: '{{ ansible_env.HOME }}/.templates'
|
||||||
state: link
|
state: link
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
|
# path update
|
||||||
|
- name: Getting programs list to check fish presence
|
||||||
|
ansible.builtin.package_facts:
|
||||||
|
manager: auto
|
||||||
|
|
||||||
|
- name: Updating fish path to include scripts folder
|
||||||
|
ansible.builtin.shell: fish_add_path -m {{ ansible_env.HOME }}/.bin
|
||||||
|
args:
|
||||||
|
executable: /usr/bin/fish
|
||||||
|
changed_when: false
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
# TODO: copy directory ??
|
# TODO: copy directory ??
|
||||||
|
|
||||||
# create .ssh in files by hand, use everywere automatically
|
# create .ssh in files by hand, use everywere automatically
|
||||||
- name: Link gitconfig
|
- name: Linking ssh
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
src: '{{ role_path }}/files/.ssh'
|
src: '{{ role_path }}/files/.ssh'
|
||||||
dest: '{{ ansible_env.HOME }}/.ssh'
|
dest: '{{ ansible_env.HOME }}/.ssh'
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
- name: Install flatpak
|
- name: Installing flatpak
|
||||||
become: true
|
become: true
|
||||||
ansible.builtin.dnf5:
|
ansible.builtin.dnf5:
|
||||||
name:
|
name:
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
flatpakrepo_url: https://dl.flathub.org/repo/flathub.flatpakrepo
|
flatpakrepo_url: https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||||
method: user
|
method: user
|
||||||
|
|
||||||
- name: Install utils
|
- name: Installing utils
|
||||||
community.general.flatpak:
|
community.general.flatpak:
|
||||||
name:
|
name:
|
||||||
- com.github.tchx84.Flatseal
|
- com.github.tchx84.Flatseal
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
method: user
|
method: user
|
||||||
when: "'utils' in flatpak_apps"
|
when: "'utils' in flatpak_apps"
|
||||||
|
|
||||||
- name: Install web browsers
|
- name: Installing web browsers
|
||||||
community.general.flatpak:
|
community.general.flatpak:
|
||||||
name:
|
name:
|
||||||
- io.gitlab.librewolf-community
|
- io.gitlab.librewolf-community
|
||||||
|
|
@ -46,7 +46,7 @@
|
||||||
method: user
|
method: user
|
||||||
when: "'web' in flatpak_apps"
|
when: "'web' in flatpak_apps"
|
||||||
|
|
||||||
- name: Install docs tools
|
- name: Installing docs tools
|
||||||
community.general.flatpak:
|
community.general.flatpak:
|
||||||
name:
|
name:
|
||||||
- com.github.arminstraub.krop
|
- com.github.arminstraub.krop
|
||||||
|
|
@ -61,7 +61,7 @@
|
||||||
method: user
|
method: user
|
||||||
when: "'docs' in flatpak_apps"
|
when: "'docs' in flatpak_apps"
|
||||||
|
|
||||||
- name: Install notes tools
|
- name: Installing notes tools
|
||||||
community.general.flatpak:
|
community.general.flatpak:
|
||||||
name:
|
name:
|
||||||
- com.github.flxzt.rnote
|
- com.github.flxzt.rnote
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
method: user
|
method: user
|
||||||
when: "'notes' in flatpak_apps"
|
when: "'notes' in flatpak_apps"
|
||||||
|
|
||||||
- name: Install ai tools
|
- name: Installing ai tools
|
||||||
community.general.flatpak:
|
community.general.flatpak:
|
||||||
name:
|
name:
|
||||||
- com.jeffser.Alpaca
|
- com.jeffser.Alpaca
|
||||||
|
|
@ -78,7 +78,7 @@
|
||||||
method: user
|
method: user
|
||||||
when: "'ai' in flatpak_apps"
|
when: "'ai' in flatpak_apps"
|
||||||
|
|
||||||
- name: Install art tools
|
- name: Installing art tools
|
||||||
community.general.flatpak:
|
community.general.flatpak:
|
||||||
name:
|
name:
|
||||||
- io.github.guillaumechereau.Goxel
|
- io.github.guillaumechereau.Goxel
|
||||||
|
|
@ -92,7 +92,7 @@
|
||||||
method: user
|
method: user
|
||||||
when: "'art' in flatpak_apps"
|
when: "'art' in flatpak_apps"
|
||||||
|
|
||||||
- name: Install tools for things production
|
- name: Installing tools for things production
|
||||||
community.general.flatpak:
|
community.general.flatpak:
|
||||||
name:
|
name:
|
||||||
- org.kicad.KiCad
|
- org.kicad.KiCad
|
||||||
|
|
@ -101,7 +101,7 @@
|
||||||
method: user
|
method: user
|
||||||
when: "'production' in flatpak_apps"
|
when: "'production' in flatpak_apps"
|
||||||
|
|
||||||
- name: Install gamedev tools
|
- name: Installing gamedev tools
|
||||||
community.general.flatpak:
|
community.general.flatpak:
|
||||||
name:
|
name:
|
||||||
- org.godotengine.GodotSharp
|
- org.godotengine.GodotSharp
|
||||||
|
|
@ -111,7 +111,7 @@
|
||||||
method: user
|
method: user
|
||||||
when: "'gamedev' in flatpak_apps"
|
when: "'gamedev' in flatpak_apps"
|
||||||
|
|
||||||
- name: Install dev tools
|
- name: Installing dev tools
|
||||||
community.general.flatpak:
|
community.general.flatpak:
|
||||||
name:
|
name:
|
||||||
- dev.lapce.lapce
|
- dev.lapce.lapce
|
||||||
|
|
@ -126,7 +126,7 @@
|
||||||
method: user
|
method: user
|
||||||
when: "'dev' in flatpak_apps"
|
when: "'dev' in flatpak_apps"
|
||||||
|
|
||||||
- name: Install games
|
- name: Installing games
|
||||||
community.general.flatpak:
|
community.general.flatpak:
|
||||||
name:
|
name:
|
||||||
- com.usebottles.bottles
|
- com.usebottles.bottles
|
||||||
|
|
@ -143,7 +143,7 @@
|
||||||
method: user
|
method: user
|
||||||
when: "'games' in flatpak_apps"
|
when: "'games' in flatpak_apps"
|
||||||
|
|
||||||
- name: Install messaging apps
|
- name: Installing messaging apps
|
||||||
community.general.flatpak:
|
community.general.flatpak:
|
||||||
name:
|
name:
|
||||||
- org.claws_mail.Claws-Mail
|
- org.claws_mail.Claws-Mail
|
||||||
|
|
@ -157,7 +157,7 @@
|
||||||
method: user
|
method: user
|
||||||
when: "'messaging' in flatpak_apps"
|
when: "'messaging' in flatpak_apps"
|
||||||
|
|
||||||
- name: Install study apps
|
- name: Installing study apps
|
||||||
community.general.flatpak:
|
community.general.flatpak:
|
||||||
name:
|
name:
|
||||||
- org.kde.kig
|
- org.kde.kig
|
||||||
|
|
|
||||||
10
roles/installs/tasks/ansible.yml
Normal file
10
roles/installs/tasks/ansible.yml
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
- name: Installing ansible packages
|
||||||
|
become: true
|
||||||
|
ansible.builtin.dnf5:
|
||||||
|
name:
|
||||||
|
- ansible
|
||||||
|
- ansible-lint
|
||||||
|
- python3-github3py
|
||||||
|
- python3-rpm
|
||||||
|
state: latest
|
||||||
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
- name: Install cli tools
|
- name: Installing cli tools
|
||||||
|
become: true
|
||||||
ansible.builtin.dnf5:
|
ansible.builtin.dnf5:
|
||||||
name:
|
name:
|
||||||
# shells & common utils
|
# shells & common utils
|
||||||
|
|
@ -27,8 +28,7 @@
|
||||||
- git
|
- git
|
||||||
|
|
||||||
# other
|
# other
|
||||||
- ansible
|
- cronie
|
||||||
- ansible-lint
|
|
||||||
|
|
||||||
state: latest
|
state: latest
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
- name: Install gui tools
|
- name: Installing gui tools
|
||||||
|
become: true
|
||||||
ansible.builtin.dnf5:
|
ansible.builtin.dnf5:
|
||||||
name:
|
name:
|
||||||
- jetbrains-mono-fonts
|
- jetbrains-mono-fonts
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
- name: Install cli tools for bare metal host
|
- name: Installing cli tools for bare metal host
|
||||||
|
become: true
|
||||||
ansible.builtin.dnf5:
|
ansible.builtin.dnf5:
|
||||||
name:
|
name:
|
||||||
- distrobox
|
- distrobox
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,19 @@
|
||||||
- name: Install common cli apps
|
- name: Installing ansible packages
|
||||||
|
ansible.builtin.import_tasks: ansible.yml
|
||||||
|
when: "'ansible' in apps"
|
||||||
|
|
||||||
|
- name: Installing common cli apps
|
||||||
ansible.builtin.import_tasks: cli.yml
|
ansible.builtin.import_tasks: cli.yml
|
||||||
when: "'cli' in apps"
|
when: "'cli' in apps"
|
||||||
|
|
||||||
- name: Install common gui apps
|
- name: Installing common gui apps
|
||||||
ansible.builtin.import_tasks: gui.yml
|
ansible.builtin.import_tasks: gui.yml
|
||||||
when: "'gui' in apps"
|
when: "'gui' in apps"
|
||||||
|
|
||||||
- name: Install pps for host
|
- name: Installing pps for host
|
||||||
ansible.builtin.import_tasks: host.yml
|
ansible.builtin.import_tasks: host.yml
|
||||||
when: "'host' in apps"
|
when: "'host' in apps"
|
||||||
|
|
||||||
- name: Install proxies
|
- name: Installing proxies
|
||||||
ansible.builtin.import_tasks: proxy.yml
|
ansible.builtin.import_tasks: proxy.yml
|
||||||
when: "'proxy' in apps"
|
when: "'proxy' in apps"
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
action: latest_release
|
action: latest_release
|
||||||
register: hola_version
|
register: hola_version
|
||||||
|
|
||||||
- name: "Installing hola-proxy {{ hola_version.tag }}"
|
- name: Installing hola-proxy {{ hola_version.tag }}
|
||||||
become: true
|
become: true
|
||||||
ansible.builtin.get_url:
|
ansible.builtin.get_url:
|
||||||
# TODO: insert v before version ??
|
# TODO: insert v before version ??
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
action: latest_release
|
action: latest_release
|
||||||
register: opera_version
|
register: opera_version
|
||||||
|
|
||||||
- name: "Installing opera-proxy {{ opera_version.tag }}"
|
- name: Installing opera-proxy {{ opera_version.tag }}
|
||||||
become: true
|
become: true
|
||||||
ansible.builtin.get_url:
|
ansible.builtin.get_url:
|
||||||
# TODO: insert v before version ??
|
# TODO: insert v before version ??
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue