From fd00ffff45bc668afcc6af5c0535d085c1649a67 Mon Sep 17 00:00:00 2001 From: jonnybravo Date: Mon, 5 Jan 2026 15:07:59 +0100 Subject: [PATCH] first commit --- README.md | 3 + galaxy.yml | 70 +++++++++++++++++++++++ meta/runtime.yml | 53 ++++++++++++++++++ plugins/README.md | 31 +++++++++++ roles/fish/tasks/main.yml | 54 ++++++++++++++++++ roles/fish/templates/config.fish.j2 | 86 +++++++++++++++++++++++++++++ roles/fish/vars/basic_archlinux.yml | 9 +++ roles/fish/vars/basic_debian.yml | 9 +++ roles/fish/vars/basic_ubuntu.yml | 8 +++ 9 files changed, 323 insertions(+) create mode 100644 README.md create mode 100644 galaxy.yml create mode 100644 meta/runtime.yml create mode 100644 plugins/README.md create mode 100644 roles/fish/tasks/main.yml create mode 100755 roles/fish/templates/config.fish.j2 create mode 100755 roles/fish/vars/basic_archlinux.yml create mode 100755 roles/fish/vars/basic_debian.yml create mode 100755 roles/fish/vars/basic_ubuntu.yml diff --git a/README.md b/README.md new file mode 100644 index 0000000..c1db11c --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Ansible Collection - local.fish_shell + +Documentation for the collection. diff --git a/galaxy.yml b/galaxy.yml new file mode 100644 index 0000000..8761f47 --- /dev/null +++ b/galaxy.yml @@ -0,0 +1,70 @@ +#SPDX-License-Identifier: MIT-0 +### REQUIRED +# The namespace of the collection. This can be a company/brand/organization or product namespace under which all +# content lives. May only contain alphanumeric lowercase characters and underscores. Namespaces cannot start with +# underscores or numbers and cannot contain consecutive underscores +namespace: local + +# The name of the collection. Has the same character restrictions as 'namespace' +name: fish_shell + +# The version of the collection. Must be compatible with semantic versioning +version: 1.0.0 + +# The path to the Markdown (.md) readme file. This path is relative to the root of the collection +readme: README.md + +# A list of the collection's content authors. Can be just the name or in the format 'Full Name (url) +# @nicks:irc/im.site#channel' +authors: +- your name + + +### OPTIONAL but strongly recommended +# A short summary description of the collection +description: your collection description + +# Either a single license or a list of licenses for content inside of a collection. Ansible Galaxy currently only +# accepts L(SPDX,https://spdx.org/licenses/) licenses. This key is mutually exclusive with 'license_file' +license: +- GPL-2.0-or-later + +# The path to the license file for the collection. This path is relative to the root of the collection. This key is +# mutually exclusive with 'license' +license_file: '' + +# A list of tags you want to associate with the collection for indexing/searching. A tag name has the same character +# requirements as 'namespace' and 'name' +tags: [] + +# Collections that this collection requires to be installed for it to be usable. The key of the dict is the +# collection label 'namespace.name'. The value is a version range +# L(specifiers,https://python-semanticversion.readthedocs.io/en/latest/#requirement-specification). Multiple version +# range specifiers can be set and are separated by ',' +dependencies: {} + +# The URL of the originating SCM repository +repository: http://example.com/repository + +# The URL to any online docs +documentation: http://docs.example.com + +# The URL to the homepage of the collection/project +homepage: http://example.com + +# The URL to the collection issue tracker +issues: http://example.com/issue/tracker + +# A list of file glob-like patterns used to filter any files or directories that should not be included in the build +# artifact. A pattern is matched from the relative path of the file or directory of the collection directory. This +# uses 'fnmatch' to match the files or directories. Some directories and files like 'galaxy.yml', '*.pyc', '*.retry', +# and '.git' are always filtered. Mutually exclusive with 'manifest' +build_ignore: [] + +# A dict controlling use of manifest directives used in building the collection artifact. The key 'directives' is a +# list of MANIFEST.in style +# L(directives,https://packaging.python.org/en/latest/guides/using-manifest-in/#manifest-in-commands). The key +# 'omit_default_directives' is a boolean that controls whether the default directives are used. Mutually exclusive +# with 'build_ignore' +# manifest: null + diff --git a/meta/runtime.yml b/meta/runtime.yml new file mode 100644 index 0000000..936cae9 --- /dev/null +++ b/meta/runtime.yml @@ -0,0 +1,53 @@ +#SPDX-License-Identifier: MIT-0 +--- +# Collections must specify a minimum required ansible version to upload +# to galaxy +# requires_ansible: '>=2.9.10' + +# Content that Ansible needs to load from another location or that has +# been deprecated/removed +# plugin_routing: +# action: +# redirected_plugin_name: +# redirect: ns.col.new_location +# deprecated_plugin_name: +# deprecation: +# removal_version: "4.0.0" +# warning_text: | +# See the porting guide on how to update your playbook to +# use ns.col.another_plugin instead. +# removed_plugin_name: +# tombstone: +# removal_version: "2.0.0" +# warning_text: | +# See the porting guide on how to update your playbook to +# use ns.col.another_plugin instead. +# become: +# cache: +# callback: +# cliconf: +# connection: +# doc_fragments: +# filter: +# httpapi: +# inventory: +# lookup: +# module_utils: +# modules: +# netconf: +# shell: +# strategy: +# terminal: +# test: +# vars: + +# Python import statements that Ansible needs to load from another location +# import_redirection: +# ansible_collections.ns.col.plugins.module_utils.old_location: +# redirect: ansible_collections.ns.col.plugins.module_utils.new_location + +# Groups of actions/modules that take a common set of options +# action_groups: +# group_name: +# - module1 +# - module2 diff --git a/plugins/README.md b/plugins/README.md new file mode 100644 index 0000000..3cc71c3 --- /dev/null +++ b/plugins/README.md @@ -0,0 +1,31 @@ +# Collections Plugins Directory + +This directory can be used to ship various plugins inside an Ansible collection. Each plugin is placed in a folder that +is named after the type of plugin it is in. It can also include the `module_utils` and `modules` directory that +would contain module utils and modules respectively. + +Here is an example directory of the majority of plugins currently supported by Ansible: + +``` +└── plugins + ├── action + ├── become + ├── cache + ├── callback + ├── cliconf + ├── connection + ├── filter + ├── httpapi + ├── inventory + ├── lookup + ├── module_utils + ├── modules + ├── netconf + ├── shell + ├── strategy + ├── terminal + ├── test + └── vars +``` + +A full list of plugin types can be found at [Working With Plugins](https://docs.ansible.com/ansible-core/2.20/plugins/plugins.html). diff --git a/roles/fish/tasks/main.yml b/roles/fish/tasks/main.yml new file mode 100644 index 0000000..3d7522a --- /dev/null +++ b/roles/fish/tasks/main.yml @@ -0,0 +1,54 @@ +--- + +- debug: + msg: "basic_{{ ansible_facts['distribution']| lower | replace( ' ', '-') }}.yml" + +- name: Load system-specific parameters + include_vars: > + basic_{{ ansible_facts['distribution']| lower | replace( ' ', '-') }}.yml + +- name: Update pacman mirrorlist on Archlinux + command: pacman -Syy + when: ansible_facts['distribution'] == "Archlinux" + +- name: Install Packages + package: + name: "{{ item }}" + state: present + loop: + - "{{ basic_packages }}" + +- name: Gather user information + ansible.builtin.getent: + database: passwd + +# - name: Get all users with bash or zsh shell +# ansible.builtin.shell: | +# awk -F: '$7 ~ /bash|zsh/ {print $1}' /etc/passwd +# register: users_with_bash_zsh +# +# - name: Set Fish as default shell for each user +# ansible.builtin.user: +# name: "{{ item }}" +# shell: "{{ fish_shell_path }}" +# loop: "{{ users_with_bash_zsh.stdout_lines }}" + +- name: Create a list of users with bash or zsh shell + set_fact: + my_users: "{{ ansible_facts.getent_passwd | dict2items | selectattr('value.5', 'in', ['/bin/bash', '/usr/bin/bash', '/bin/zsh', '/usr/bin/zsh']) | map(attribute='key') | list }}" + +- name: Debug my_users + debug: + var: my_users + +- name: Set Fish as default shell for each user + ansible.builtin.user: + name: "{{ item }}" + shell: "{{ fish_shell_path }}" + loop: "{{ my_users }}" + +- name: Kopier Config File + ansible.builtin.template: + src: config.fish.j2 + dest: /etc/fish/config.fish + diff --git a/roles/fish/templates/config.fish.j2 b/roles/fish/templates/config.fish.j2 new file mode 100755 index 0000000..e0659c1 --- /dev/null +++ b/roles/fish/templates/config.fish.j2 @@ -0,0 +1,86 @@ +#kleine fish - Welcome - Nachricht +set -U fish_greeting "Hallo du kleiner Fish" +setenv SSH_ENV $HOME/.ssh/environment + +function start_agent + echo "Initializing new SSH agent ..." + ssh-agent -c | sed 's/^echo/#echo/' > $SSH_ENV + echo "succeeded" + chmod 600 $SSH_ENV + . $SSH_ENV > /dev/null + ssh-add +end + +function test_identities + ssh-add -l | grep "The agent has no identities" > /dev/null + if [ $status -eq 0 ] + ssh-add + if [ $status -eq 2 ] + start_agent + end + end +end + +if [ -n "$SSH_AGENT_PID" ] + ps -ef | grep $SSH_AGENT_PID | grep ssh-agent > /dev/null + if [ $status -eq 0 ] + test_identities + end +else + if [ -f $SSH_ENV ] + . $SSH_ENV > /dev/null + end + ps -ef | grep $SSH_AGENT_PID | grep -v grep | grep ssh-agent > /dev/null + if [ $status -eq 0 ] + test_identities + else + start_agent + end +end +# Einstell u ng e n nur f ü r die interakti v e Nutzung +if status is-interactive +# abr statt alias +# +# +# alias zshconfig="vim ~/.zshrc" + + {% if ansible_facts['os_family'] == "Debian" %} + abbr cat "/usr/bin/batcat" + {%else %} + abbr cat "bat" + {% endif %} + + abbr ll "eza -loi --git --git-repos --header --hyperlink -X -s size" + abbr vim "nvim" + abbr activate_poetry 'eval $(poetry env activate)' + export CDPATH="/home/$USER/:/home/$USER/Projekte" + abbr -a gc 'git commit ' + # Liebling seditor + set -gx EDITOR /usr/bin/nvim + #/home/jonnybravo/Projekte/Python_Skripte/SSH_Agent/main.py + fastfetch # -c /home/jonnybravo/.config/fastfetch/my_config.jsonc + if type -q tmux + if not test -n "$TMUX" + tmux attach-session -t default; or tmux new-session -s default + + end + end + + + if [ -n "$SSH_AGENT_PID" ] + ps -ef | grep $SSH_AGENT_PID | grep ssh-agent > /dev/null + if [ $status -eq 0 ] + test_identities + end + else + if [ -f $SSH_ENV ] + . $SSH_ENV > /dev/null + end + ps -ef | grep $SSH_AGENT_PID | grep -v grep | grep ssh-agent > /dev/null + if [ $status -eq 0 ] + test_identities + else + start_agent + end + end +end diff --git a/roles/fish/vars/basic_archlinux.yml b/roles/fish/vars/basic_archlinux.yml new file mode 100755 index 0000000..e7ef620 --- /dev/null +++ b/roles/fish/vars/basic_archlinux.yml @@ -0,0 +1,9 @@ +basic_packages: + - "vim" + - "fish" + - "bat" + - "eza" + - "neovim" + - "fastfetch" +fish_shell_path: "/usr/bin/fish" + diff --git a/roles/fish/vars/basic_debian.yml b/roles/fish/vars/basic_debian.yml new file mode 100755 index 0000000..e7ef620 --- /dev/null +++ b/roles/fish/vars/basic_debian.yml @@ -0,0 +1,9 @@ +basic_packages: + - "vim" + - "fish" + - "bat" + - "eza" + - "neovim" + - "fastfetch" +fish_shell_path: "/usr/bin/fish" + diff --git a/roles/fish/vars/basic_ubuntu.yml b/roles/fish/vars/basic_ubuntu.yml new file mode 100755 index 0000000..601f29b --- /dev/null +++ b/roles/fish/vars/basic_ubuntu.yml @@ -0,0 +1,8 @@ +basic_packages: + - "vim" + - "fish" + - "bat" + - "eza" + - "neovim" +fish_shell_path: "/usr/bin/fish" +